コード例 #1
0
class FinishPage(GridLayout):

    account_type = None

    def __init__(self, **kwargs):
        super().__init__(**kwargs)

        self.snackbar = None

    def start(self):

        self.tsc = SmartCardBehavior(
            self.name,
            card_insert_callback=None,
            card_remove_callback=None,
            card_reinsert_callback=None,
            card_remove_forever_callback=self.card_remove_forever_callback,
            card_removable=True)

        #self.tsc.monitor(4)

    def card_remove_forever_callback(self):
        pass

    def snackbar_show(self, text, duration=8):
        if self.snackbar:
            self.snackbar = None
        self.snackbar = Snackbar(text=text, duration=duration)
        self.snackbar.show()
        #Clock.schedule_once(self.snackbar_hide, wait)

    def snackbar_hide(self, instance=None):
        if self.snackbar:
            self.snackbar.hide()
            self.snackbar = None
コード例 #2
0
    def on_pre_enter(self, *args):
        """La función se ejecuta antes de ingresar a la clase Mapa Comercios, la función actualiza el nombre  del
        modulo correspondiente"""
        self.app.title = "Mapa Comercios"

        snackbar = Snackbar(text="Utiliza el mapa de comercios para encontrar la localizacion de algun Chedraui, La Comer, Soriana o HEB")
        snackbar.show()
コード例 #3
0
class KivMobDemoUI(FloatLayout):
    def switch_to_screen(self, name, title):
        self.ids.toolbar.title = title
        self.ids.toolbar.left_action_items = [
            ["chevron-left", lambda x: self.back_to_menu()]
        ]
        self.ids.scr_mngr.transition.direction = "left"
        self.ids.scr_mngr.current = name
        self.interstitial_snack = Snackbar(
            text="Interstitial has not yet loaded."
        )

    def back_to_menu(self):
        self.ids.scr_mngr.transition.direction = "right"
        self.ids.scr_mngr.current = "menu"
        self.ids.toolbar.title = "KivMob 2.0"
        self.ids.toolbar.left_action_items = []

    def show_interstitial_msg(self):
        self.interstitial_snack.show()

    def hide_interstitial_msg(self):
        self.interstitial_snack.hide()

    def open_dialog(self):
        pass
コード例 #4
0
    def MuestraNotificacionComparador(self):
        """Se muestra las notificaciones que se anexaron al modulo del comparador de precios"""
        self.a = randint(1, 6)
        print(self.a)
        if self.a == 1:

            notification.notify(
                title='Como Actualizar los precios',
                message=
                'Puedes actualizar los precios de los productos pulsando el boton de Actualizar que se encuentra en'
                'la parte superior',
                timeout=20)
            snackbar = Snackbar(
                text=
                "Puedes actualizar los precios de los productos pulsando el boton de Actualizar que se encuentra en la parte superior"
            )
            snackbar.show()

        if self.a == 2:
            notification.notify(
                title='Visualización de los Precios',
                message=
                'Los precios pueden ser consultados deslizando la tabla que se muestra al consultar alguna categoría',
                timeout=20)
            snackbar = Snackbar(
                text=
                "Los precios pueden ser consultados deslizando la tabla que se muestra al consultar alguna categoría"
            )
            snackbar.show()

        pass
コード例 #5
0
ファイル: snackbar.py プロジェクト: bonajordan/KivyMD
    class Test(MDApp):
        def __init__(self, **kwargs):
            super().__init__(**kwargs)
            self.screen = Builder.load_string(KV)
            self.snackbar = None
            self._interval = 0

        def build(self):
            return self.screen

        def wait_interval(self, interval):
            self._interval += interval
            if self._interval > self.snackbar.duration:
                anim = Animation(y=dp(10), d=.2)
                anim.start(self.screen.ids.button)
                Clock.unschedule(self.wait_interval)
                self._interval = 0
                self.snackbar = None

        def snackbar_show(self):
            if not self.snackbar:
                self.snackbar = Snackbar(text="This is a snackbar!")
                self.snackbar.show()
                anim = Animation(y=dp(72), d=.2)
                anim.bind(on_complete=lambda *args: Clock.schedule_interval(
                    self.wait_interval, 0))
                anim.start(self.screen.ids.button)
コード例 #6
0
class KitchenSinkSnackBar(Screen):
    snackbar = None
    _interval = 0

    def show_example_snackbar(self, snack_type):
        """Create and show instance Snackbar."""

        def callback(instance):
            from kivymd.toast import toast

            toast(instance.text)

        def wait_interval(interval):
            self._interval += interval
            if self._interval > self.snackbar.duration:
                anim = Animation(y=dp(10), d=0.2)
                anim.start(self.ids.button)
                Clock.unschedule(wait_interval)
                self._interval = 0
                self.snackbar = None

        from kivymd.uix.snackbar import Snackbar

        if snack_type == "simple":
            Snackbar(text="This is a snackbar!").show()
        elif snack_type == "button":
            Snackbar(
                text="This is a snackbar",
                button_text="WITH A BUTTON",
                button_callback=callback,
            ).show()
        elif snack_type == "verylong":
            Snackbar(
                text="This is a very very very very very very very "
                "long snackbar!"
            ).show()
        elif snack_type == "padding":
            Snackbar(
                text="This is a snackbar!",
                padding="20dp",
                button_text="ACTION",
                button_color=(1, 0, 1, 1),
            ).show()
        elif snack_type == "float":
            if not self.snackbar:
                self.snackbar = Snackbar(
                    text="This is a snackbar!",
                    button_text="BUTTON",
                    duration=3,
                    button_callback=callback,
                )
                self.snackbar.show()
                anim = Animation(y=dp(72), d=0.2)
                anim.bind(
                    on_complete=lambda *args: Clock.schedule_interval(
                        wait_interval, 0
                    )
                )
                anim.start(self.ids.button)
コード例 #7
0
        def hitung(self):

            toast("Counting..........")
            try:
                from rajaOngkirApi import rajaongkirApi
                api = rajaongkirApi(key='23930140f7b47aaebf5318262ee5d0f1',
                                    accountType='starter')

                self.id_origin = self.data_tables[
                    self.ids.ongkirscreen.ids.province.text][
                        self.ids.ongkirscreen.ids.kota.text]

                self.id_destinasi = self.data_tables[
                    self.ids.ongkirscreen.ids.province_tujuan.text][
                        self.ids.ongkirscreen.ids.kota_tujuan.text]
                print(self.id_origin, self.id_destinasi)
                if bool(self.ids.ongkirscreen.ids.weight.text) == False:
                    from kivymd.uix.snackbar import Snackbar
                    snackbar = Snackbar(text="Harap Isi Semuanya",
                                        duration=0.5)
                    snackbar.show()
                else:
                    harga = api.requestApi(
                        origin=self.id_origin,
                        destination=self.id_destinasi,
                        weight=str(self.ids.ongkirscreen.ids.weight.text),
                        courier=self.ids.ongkirscreen.ids.kurir.text.lower())
                    harga = harga.decode('utf-8')

                    harga = json.loads(harga)
                    deskripsi = ''
                    for i in ((harga['rajaongkir']['results'][0]['costs'])):
                        if 'HARI' in i["cost"][0]["etd"]:

                            deskripsi += f' {i["service"]} : Rp {i["cost"][0]["value"]} \n Perkiraan {i["cost"][0]["etd"]}\n'

                        else:
                            print(f'{i["cost"][0]["etd"]}')
                            deskripsi += f' {i["service"]} : Rp {i["cost"][0]["value"]} \n Perkiraan {i["cost"][0]["etd"]} hari\n'

                    if self.ids.ongkirscreen.ids.kurir.text.lower() == 'jne':

                        self.ids.ongkirscreen.ids.image.ii = self.images[0]

                    if self.ids.ongkirscreen.ids.kurir.text.lower() == 'tiki':

                        self.ids.ongkirscreen.ids.image.ii = self.images[1]
                    if self.ids.ongkirscreen.ids.kurir.text.lower() == 'pos':

                        self.ids.ongkirscreen.ids.image.ii = self.images[2]
                    if deskripsi == '':
                        self.ids.ongkirscreen.ids.label.text = 'tidak ada kurir yang tersedia'
                    if deskripsi != '':
                        self.ids.ongkirscreen.ids.label.text = deskripsi
            except:
                from kivymd.uix.snackbar import Snackbar
                snackbar = Snackbar(text="Harap Isi Semuanya", duration=0.5)
                snackbar.show()
コード例 #8
0
class AddResourcesWindow(Screen):
    def load_page(self):
        ContentNavigationDrawer.populateNavDrawerValues(self)
        self.rsrcmenu = MDDropdownMenu(caller=self.ids['name'],
                                       width_mult=5,
                                       callback=self.set_item,
                                       position="center")
        items = [
            "Medicine", "Biscuit", "Salt", "Tarpaulin", "Rice", "Daal",
            "Baby Food", "Sugar"
        ]
        for i in items:
            self.rsrcmenu.items.append({"text": str(i)})

    def create_resource(self, name, desc, units, amount):
        rname = name.current_item
        rdesc = desc.text
        runits = units.text
        ramount = amount.text
        valid_str = ""
        if rname == "":
            valid_str = "Select an Item"
        elif runits == "":
            valid_str = "Units is blank"
        elif ramount == "":
            valid_str = "Cost is blank"
        if valid_str != "":
            ok_button = MDFlatButton(text='OK', on_release=self.dialog_close)
            self.dialog = MDDialog(title='Alert !',
                                   text=valid_str,
                                   size_hint=(0.7, 1),
                                   buttons=[ok_button])
            self.dialog.open()
        else:
            query1 = f'''INSERT INTO RESOURCES(CONTACT_ID, ACTIVITY_ID, NAME, DESC, UNITS, AMOUNT, DATE) 
            VALUES ({globalvariables.var_userid}, {globalvariables.var_act_id}, '{rname}', '{rdesc}', {runits},
            {ramount}, SYSDATE)'''
            # run direct SQL
            stmt = ibm_db.exec_immediate(connection.conn, query1)
            if ibm_db.num_rows(stmt) > 0:
                #self.ids['name'].text=""
                self.ids['desc'].text = ""
                self.ids['units'].text = ""
                self.ids['amount'].text = ""
                self.snackbar = Snackbar(text="Item Added!")
                self.snackbar.show()

    def dialog_close(self, obj):
        self.dialog.dismiss()

    def set_item(self, instance):
        self.ids['name'].set_item(instance.text)
        self.rsrcmenu.dismiss()

    def cancel_resource_creation(self):
        self.manager.transition.direction = 'right'
        self.manager.current = 'activity_detail_window'
        self.manager.get_screen('activity_detail_window').load_page()
コード例 #9
0
    def imuPlotExcept(self, *args):
        self.cancelPlot()
        imuExceptionBar = Snackbar(
            text=
            f'Connection with IMU not established, connect Swe device first and retry',
            button_text="ConnectionScreen",
            button_callback=self.switchToConnection)

        imuExceptionBar.show()
コード例 #10
0
    def borrar_archivo(self):
        print("borrando")

        gauth = GoogleAuth()
        # Try to load saved client credentials
        gauth.LoadCredentialsFile("mycreds.txt")
        if gauth.credentials is None:
            # Authenticate if they're not there
            gauth.LocalWebserverAuth()
        elif gauth.access_token_expired:
            # Refresh them if expired
            gauth.Refresh()
        else:
            # Initialize the saved creds
            gauth.Authorize()
        # Save the current credentials to a file
        gauth.SaveCredentialsFile("mycreds.txt")

        drive = GoogleDrive(gauth)

        folderName = "App Inventario"
        folder_id = ''
        # creacion archivo en un folder específico
        folders = drive.ListFile({
            'q':
            "title='" + folderName +
            "' and mimeType='application/vnd.google-apps.folder' and trashed=false"
        }).GetList()

        file_list = drive.ListFile({
            'q': "'root' in parents and trashed=false"
        }).GetList()

        for file in file_list:
            if (file['title'] == folderName):
                folder_id = file['id']

                break

        # 3) Build string dynamically (need to use escape characters to support single quote syntax)
        str = "\'" + folder_id + "\'" + " in parents and trashed=false"

        # 4) Starting iterating over files
        file_list = drive.ListFile({'q': str}).GetList()
        for file in file_list:
            print('title: %s, id: %s' % (file['title'], file['id']))
            if file['title'] == "ReporteGastos.pdf":
                file.Delete()
            if file['title'] == "database.db":
                file.Delete()

        # Informar que se ha borrado el archivo
        snackbar = Snackbar(
            text="Los datos contenidos en Google Drive han sido borrados")
        snackbar.show()
コード例 #11
0
    def on_pre_enter(self, *args):
        """La función se ejecuta antes de ingresar a la clase Reporte de Gastos, la función actualiza el nombre  del
        modulo correspondiente"""
        self.app.title = "Reporte de Gastos"

        #Muestra notificación de escaso
        print("Estoy en pre enter")

        APP_PATH = os.getcwd()
        DB_PATH = APP_PATH + '/prueba.db'  # SE DEBE CAMBIAR EL NOMBRE AL NOMBRE DE LA BD FINAL
        con = sqlite3.connect(DB_PATH)  # CONEXION A LA BD
        cursor = con.cursor()  # CURSOR PARA EJECUTAR QUERYS

        cantidades = []
        cantidadfinal = []
        nomproductos = []
        nomproductofinal = []

        cursor.execute("""SELECT CANTIDAD FROM PRODUCTOS """)
        for a in cursor:
            cantidades.append(list(a))

        for cantidad in cantidades:

            for elemento in cantidad:
                cantidadfinal.append(int(elemento))

        cursor.execute("""SELECT NOMBRE FROM PRODUCTOS """)
        for a in cursor:
            nomproductos.append(list(a))

        for nomprod in nomproductos:
            for elemento in nomprod:
                nomproductofinal.append(elemento)

        # print((cantidadfinal[1])>5)
        # print(nomproductofinal[1])

        print(nomproductofinal)
        a = 0
        cadena_escaso = 'Se te esta acabando:  '
        for c in cantidadfinal:
            # print(c > 4)
            if c < 2:
                print(
                    f"Producto: {nomproductofinal[a]} con {cantidadfinal[a]}")
                cadena_escaso += str(nomproductofinal[a]) + ' tienes:' + str(
                    cantidadfinal[a]) + ' '
                continue
            a += 1

        snackbar = Snackbar(text=cadena_escaso)
        snackbar.show()
コード例 #12
0
def snack_open(msg, btn_text, btn_callback):
    col = App.get_running_app().theme_cls.primary_color
    sn = Snackbar(
        text=msg,
        button_text=btn_text,
        button_callback=btn_callback,
    )
    for x in sn.ids.box.children:
        if isinstance(x, MDFlatButton):
            x.theme_text_color = "Custom"
            x.text_color = col
            break
    sn.show()
コード例 #13
0
ファイル: main.py プロジェクト: regisnew/ElPCD
 def _export_csv(self, *args):
     """Callback for export dialog popup button"""
     try:
         ## try exporting data into .csv file
         self.export.export_data()
     except lib.utils.NotAbleToWriteFile:
         toast('Não foi possível criar o arquivo!')
     else:
         ## shows snackbar with path to new .csv file
         self.export_dialog.dismiss()
         snackbar = Snackbar(
             text=f'PCD exportado para {self.export.path_to_file}',
             duration=10
             )
         snackbar.show()
コード例 #14
0
        def change_spinn(self):
            try:
                if self.ids.ongkirscreen.ids.search_provinsi.text in list(
                        self.data_tables.keys()):

                    self.ids.ongkirscreen.ids.province.text = self.ids.ongkirscreen.ids.search_provinsi.text
                    from kivymd.uix.snackbar import Snackbar
                    snackbar = Snackbar(text="Provinsi Ditemukan", duration=1)
                    snackbar.show()
                if self.ids.ongkirscreen.ids.search_provinsi.text not in list(
                        self.data_tables.keys()):
                    from kivymd.uix.snackbar import Snackbar
                    snackbar = Snackbar(text="Provinsi Tidak Ditemukan",
                                        duration=1)
                    snackbar.show()
            except:
                pass
コード例 #15
0
ファイル: main.py プロジェクト: ALT-MIND/proving_ground
class Root(BoxLayout):
    Builder.load_file('My.kv')

    def calculate_result(self):
        self.snackbar_zero_error = Snackbar(text="Division by zero")
        calc_entry = self.math_space.text
        try:
            result = eval(str(calc_entry))
        except ZeroDivisionError:
            self.snackbar_zero_error.show()
            self.math_space.text = ''
        except SyntaxError:
            self.math_space.text = ''
        else:
            if type(result) == type(.5):
                self.math_space.text = str(round(result, 3))
            elif type(result) == type(9):
                self.math_space.text = str(result)
コード例 #16
0
ファイル: ui.py プロジェクト: Oxidiz3/OnePercentBetter
 def create_new_goal(self):
     """Creates goals in database"""
     create_try = data_base.create_goal(
         self.goal_name,
         self.icon,
         self.start_value,
         self.end_value,
         self.iteration_towards_goal,
         self.intensity,
     )
     if create_try:
         print("create new goal")
         self.reset_goal()
     else:
         error_bar = Snackbar(
             text="Goal creation failed, needs unique name")
         error_bar.show()
         print("goal failed")
コード例 #17
0
    def on_pre_enter(self, *args):
        """"Funcion que se ejecuta al iniciar la aplicacion, se incluyen diferentes parametros que se desean que apararezcan
        cuando se ejecuta la aplicacion, se cambia el titulo de la aplicacion y se crean las notificaciones iniciales que se
        le mostrarán al usuario"""
        self.app.title = "Convertidor Unidades"  #Se cambia el nombre de la pantalla
        self.MuestraNotificacionInicial()

        snackbar = Snackbar(
            text=
            "Utiliza esta sección para convertir diferentes tipos de unidades")
        snackbar.show()

        if path.exists("conf.txt"):
            print("Existe el archivo de configuracion")

        else:
            lineasm = ["Green\n", "Light\n", "Normal\n"]
            print("No existe el archivo de configuraciones")
            open("conf.txt", "w").close()  # crea un archivo# código
            print("Antes de dormir")
            sleep(1)
            print("Ejecutando despues de dormir")
            archivo = open("conf.txt", "w")
            for l in lineasm:
                archivo.write(l)
            archivo.close()

        with open("conf.txt", "r") as archivo:
            lista = [linea.rstrip() for linea in archivo]

        self.app.theme_cls.primary_palette = lista[0]
        self.app.theme_cls.theme_style = lista[1]

        if lista[2] == "Baja":
            self.app.theme_cls.primary_hue = "200"
        elif lista[2] == "Media":
            self.app.theme_cls.primary_hue = "500"
        elif lista[2] == "Alta":
            self.app.theme_cls.primary_hue = "900"
コード例 #18
0
class Challenge(Screen):
    click_color = ColorProperty()
    unclick_color = ColorProperty()
    user_answer = StringProperty()
    last_color = ColorProperty()
    win = None

    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.max_len = int(config_dict["difficulty"]) * 4 + 1
        print("Challenge: ", self.max_len)
        self.answer = ""
        self.flag = True
        self.contents = dict()
        self.last_click = []
        self.pos_list = []
        self.snackbar = Snackbar(duration=0.8)  #提示窗

        while len(self.answer) < self.max_len:
            appdata.ChangeSheet("user_" + config_dict["all_category"][randint(
                0,
                len(config_dict["all_category"]) - 1)])
            contents = appdata.MergeData(appdata.SelectIndex(1),
                                         appdata.SelectRand(1))

            for index, content in contents.items():
                if content["内容"] not in self.contents:
                    content["has_answer"] = 1
                    self.contents[content["内容"]] = content
                    self.answer += content["内容"]

        self.map, self.true_way = Map().CreateMaze(self.answer, 9)
        print(self.true_way)
        self.Refresh()

    def CheckAnswer(self, btn):
        #回答按钮点击事件,btn为产生事件的按钮对象
        if self.flag:
            self.flag = False
        else:
            return
        if len(self.last_click):
            if self.last_click[-1].mypos == btn.mypos:  #点击的是最后一个按钮
                self.last_click.pop()
                self.pos_list.remove(btn.mypos)
                if len(self.last_click):
                    self.last_click[-1].bg_color = self.last_color
                btn.bg_color = self.unclick_color
                self.user_answer = self.user_answer[:-1]
            elif btn.mypos in self.pos_list:
                if not self.snackbar.parent:
                    self.snackbar.text = "已经点击过该按钮"
                    self.snackbar.show()
            elif abs(self.last_click[-1].mypos[0] -
                     btn.mypos[0]) + abs(self.last_click[-1].mypos[1] -
                                         btn.mypos[1]) == 1:  #点击的是周围的按钮
                new_color = []
                t = len(self.last_click)
                for i in range(3):
                    new_color.append(self.click_color[i] - 0.005 * t)
                new_color.append(1)

                self.last_click[-1].bg_color = new_color
                self.last_click.append(btn)
                self.pos_list.append(btn.mypos)
                btn.bg_color = self.last_color
                self.user_answer += btn.text
            else:
                if not self.snackbar.parent:
                    self.snackbar.text = "请点击上一个点击周围的按钮"
                    self.snackbar.show()
        else:
            self.last_click.append(btn)
            self.pos_list.append(btn.mypos)
            btn.bg_color = self.last_color
            self.user_answer += btn.text
        if len(self.user_answer) < len(self.answer):
            #未回答完
            pass
        elif self.answer == self.user_answer:
            #回答正确
            print("righr")
            self.ids.righr_answer_btn.text = "点此查看相关信息"
            self.snackbar.text = "回答正确"
            self.snackbar.show()
            return
        else:
            #回答错误
            if not self.snackbar.parent:
                self.snackbar.text = "回答错误"
                self.snackbar.show()
        self.flag = True

    def Refresh(self):
        #self.ids.grid.clear_widgets()
        i = 0
        for line in self.map:
            j = 0
            for word in line:
                self.ids["pos_{}_{}".format(i, j)].text = word
                self.ids["pos_{}_{}".format(i,
                                            j)].bg_color = self.unclick_color
                #btn = ClickButton(text = word, size_hint = (0.1, 0.1), on_release = self.CheckAnswer)#这里是动态生成的控件
                #btn.mypos = [i, j]
                #self.ids.grid.add_widget(btn)
                j += 1
            i += 1
        self.pos_list.clear()
        self.last_click.clear()
        self.last_click.clear()
        self.user_answer = ""
        self.ids.righr_answer_btn.text = "查看正确答案"
        self.flag = True

    def ShowTrueWay(self):
        if self.flag:
            self.Refresh()
            for pos in self.true_way:
                self.CheckAnswer(self.ids["pos_{}_{}".format(pos[0], pos[1])])
        else:
            self.win()
コード例 #19
0
 def show_message(self, text):
     snackbar = Snackbar(
             text=f"{text}",
         )
     return snackbar.show()
コード例 #20
0
ファイル: main.py プロジェクト: salhi100/KivyMD
class KitchenSink(App, Screens):
    theme_cls = ThemeManager()
    theme_cls.primary_palette = "BlueGray"
    theme_cls.accent_palette = "Gray"
    previous_date = ObjectProperty()
    title = "Kitchen Sink"

    def __init__(self, **kwargs):
        super().__init__(**kwargs)

        self.menu_items = [{
            "viewclass": "MDMenuItem",
            "text": "Example item %d" % i,
            "callback": self.callback_for_menu_items,
        } for i in range(15)]
        self.Window = Window

        # Default class instances.
        self.manager = None
        self.md_app_bar = None
        self.instance_menu_demo_apps = None
        self.instance_menu_source_code = None
        self.md_theme_picker = None
        self.long_dialog = None
        self.input_dialog = None
        self.alert_dialog = None
        self.ok_cancel_dialog = None
        self.long_dialog = None
        self.dialog = None
        self.user_card = None
        self.bs_menu_1 = None
        self.bs_menu_2 = None
        self.popup_screen = None
        self.my_snackbar = None
        self.dialog_load_kv_files = None

        self.create_stack_floating_buttons = False
        self.manager_open = False
        self.cards_created = False

        self._interval = 0
        self.tick = 0
        self.x = 0
        self.y = 25
        self.file_source_code = ""

        self.hex_primary_color = get_hex_from_color(
            self.theme_cls.primary_color)
        self.previous_text = (
            f"Welcome to the application [b][color={self.hex_primary_color}]"
            f"Kitchen Sink[/color][/b].\nTo see [b]"
            f"[color={self.hex_primary_color}]KivyMD[/color][/b] "
            f"examples, open the menu and select from the list the desired "
            f"example or")
        self.previous_text_end = (
            f"for show example apps\n\n"
            f"Author - [b][color={self.hex_primary_color}]"
            f"Andrés Rodríguez[/color][/b]\n"
            f"[u][b][color={self.hex_primary_color}]"
            f"[email protected][/color][/b][/u]\n\n\n"
            f"Authors this Fork:\n\n"
            f"[b][color={self.hex_primary_color}]"
            f"Ivanov Yuri[/color][/b]\n"
            f"[u][b][color={self.hex_primary_color}]"
            f"[email protected][/color][/b][/u]\n\n"
            f"[b][color={self.hex_primary_color}]Artem S. Bulgakov[/color][/b]\n"
            f"[u][b][color={self.hex_primary_color}]"
            f"[email protected][/color][/b][/u]\n\n"
            f"and contributors...")
        self.names_contacts = (
            "Alexandr Taylor",
            "Yuri Ivanov",
            "Robert Patric",
            "Bob Marley",
            "Magnus Carlsen",
            "Jon Romero",
            "Anna Bell",
            "Maxim Kramerer",
            "Sasha Gray",
            "Vladimir Ivanenko",
        )
        self.demo_apps_list = [
            "Shop Window",
            "Coffee Menu",
            "Fitness Club",
            "Registration",
            "Account Page",
        ]
        self.list_name_icons = list(md_icons.keys())[0:15]
        Window.bind(on_keyboard=self.events)
        crop_image(
            (Window.width, int(dp(Window.height * 35 // 100))),
            f"{demos_assets_path}guitar-1139397_1280.png",
            f"{demos_assets_path}guitar-1139397_1280_crop.png",
        )

    def set_list_for_refresh_layout(self):
        async def set_list_for_refresh_layout():
            names_icons_list = list(md_icons.keys())[self.x:self.y]
            for name_icon in names_icons_list:
                await asynckivy.sleep(0)
                self.data["Refresh Layout"]["object"].ids.box.add_widget(
                    ItemForListRefreshLayout(icon=name_icon, text=name_icon))
            self.data["Refresh Layout"][
                "object"].ids.refresh_layout.refresh_done()

        asynckivy.start(set_list_for_refresh_layout())

    def refresh_callback(self, *args):
        """A method that updates the state of your application
        while the spinner remains on the screen."""
        def refresh_callback(interval):
            self.data["Refresh Layout"]["object"].ids.box.clear_widgets()
            if self.x == 0:
                self.x, self.y = 25, 50
            else:
                self.x, self.y = 0, 25
            self.set_list_for_refresh_layout()
            self.tick = 0

        Clock.schedule_once(refresh_callback, 1)

    def build_tabs(self):
        for name_tab in self.list_name_icons:
            tab = Factory.MyTab(text=name_tab)
            self.data["Tabs"]["object"].ids.android_tabs.add_widget(tab)

    def switch_tabs_to_icon(self, istance_android_tabs):
        for i, instance_tab in enumerate(
                istance_android_tabs.ids.scrollview.children[0].children):
            istance_android_tabs.ids.scrollview.children[0].remove_widget(
                instance_tab)
            istance_android_tabs.add_widget(
                Factory.MyTab(text=self.list_name_icons[i]))

    def switch_tabs_to_text(self, istance_android_tabs):
        for instance_tab in istance_android_tabs.ids.scrollview.children[
                0].children:
            for k, v in md_icons.items():
                if v == instance_tab.text:
                    istance_android_tabs.ids.scrollview.children[
                        0].remove_widget(instance_tab)
                    istance_android_tabs.add_widget(
                        Factory.MyTab(
                            text=" ".join(k.split("-")).capitalize()))
                    break

    def crop_image_for_tile(self, instance, size, path_to_crop_image):
        """Crop images for Grid screen."""

        if not os.path.exists(os.path.join(self.directory,
                                           path_to_crop_image)):
            size = (int(size[0]), int(size[1]))
            path_to_origin_image = path_to_crop_image.replace("_tile_crop", "")
            crop_image(size, path_to_origin_image, path_to_crop_image)
        instance.source = path_to_crop_image

    def theme_picker_open(self):
        if not self.md_theme_picker:
            from kivymd.uix.picker import MDThemePicker

            self.md_theme_picker = MDThemePicker()
        self.md_theme_picker.open()

    def example_add_stack_floating_buttons(self):
        from kivymd.uix.stackfloatingbutton import MDStackFloatingButtons

        def set_my_language(instance_button):
            toast(instance_button.icon)

        if not self.create_stack_floating_buttons:
            screen = self.main_widget.ids.scr_mngr.get_screen("stack buttons")
            screen.add_widget(
                MDStackFloatingButtons(
                    icon="lead-pencil",
                    floating_data={
                        "Python": "language-python",
                        "Php": "language-php",
                        "C++": "language-cpp",
                    },
                    callback=set_my_language,
                ))
            self.create_stack_floating_buttons = True

    def set_expansion_panel(self):
        from kivymd.uix.expansionpanel import MDExpansionPanel

        def callback(text):
            toast(f"{text} to {content.name_item}")

        content = ContentForAnimCard(callback=callback)

        for name_contact in self.names_contacts:
            self.data["Expansion Panel"]["object"].ids.anim_list.add_widget(
                MDExpansionPanel(
                    content=content,
                    icon="assets/kivy-logo-white-512.png",
                    title=name_contact,
                ))

    def set_chevron_back_screen(self):
        """Sets the return chevron to the previous screen in ToolBar."""

        self.main_widget.ids.toolbar.right_action_items = [[
            "dots-vertical", lambda x: self.root.toggle_nav_drawer()
        ]]

    def download_progress_hide(self, instance_progress, value):
        """Hides progress progress."""

        self.main_widget.ids.toolbar.right_action_items = [[
            "download",
            lambda x: self.download_progress_show(instance_progress),
        ]]

    def download_progress_show(self, instance_progress):
        self.set_chevron_back_screen()
        instance_progress.open()
        instance_progress.animation_progress_from_fade()

    def show_example_download_file(self, interval):
        from kivymd.uix.progressloader import MDProgressLoader

        def get_connect(host="8.8.8.8", port=53, timeout=3):
            import socket

            try:
                socket.setdefaulttimeout(timeout)
                socket.socket(socket.AF_INET, socket.SOCK_STREAM).connect(
                    (host, port))
                return True
            except (TimeoutError, ConnectionError, OSError):
                return False

        if get_connect():
            link = ("https://www.python.org/ftp/python/3.5.1/"
                    "python-3.5.1-embed-win32.zip")
            progress = MDProgressLoader(
                url_on_image=link,
                path_to_file=os.path.join(self.directory, "python-3.5.1.zip"),
                download_complete=self.download_complete,
                download_hide=self.download_progress_hide,
            )
            progress.start(self.data["Download File"]["object"].ids.box_flt)
        else:
            toast("Connect error!")

    def download_complete(self):
        self.set_chevron_back_screen()
        toast("Done")

    def file_manager_open(self):
        from kivymd.uix.filemanager import MDFileManager
        from kivymd.uix.dialog import MDDialog

        def open_file_manager(text_item, dialog):
            previous = False if text_item == "List" else True
            self.manager = ModalView(size_hint=(1, 1), auto_dismiss=False)
            self.file_manager = MDFileManager(
                exit_manager=self.exit_manager,
                select_path=self.select_path,
                previous=previous,
            )
            self.manager.add_widget(self.file_manager)
            self.file_manager.show(self.user_data_dir)
            self.manager_open = True
            self.manager.open()

        MDDialog(
            title="Title",
            size_hint=(0.8, 0.4),
            text_button_ok="List",
            text="Open manager with 'list' or 'previous' mode?",
            text_button_cancel="Previous",
            events_callback=open_file_manager,
        ).open()

    def select_path(self, path):
        """It will be called when you click on the file name
        or the catalog selection button.
        :type path: str;
        :param path: path to the selected directory or file;
        """

        self.exit_manager()
        toast(path)

    def exit_manager(self, *args):
        """Called when the user reaches the root of the directory tree."""

        self.manager.dismiss()
        self.manager_open = False
        self.set_chevron_menu()

    def set_chevron_menu(self):
        self.main_widget.ids.toolbar.left_action_items = [[
            "menu", lambda x: self.root.toggle_nav_drawer()
        ]]

    def events(self, instance, keyboard, keycode, text, modifiers):
        """Called when buttons are pressed on the mobile device."""

        if keyboard in (1001, 27):
            if self.manager_open:
                self.file_manager.back()
        return True

    def callback_for_menu_items(self, *args):
        toast(args[0])

    def add_cards(self, instance_grid_card):
        """Adds MDCardPost objects to the screen Cards
        when the screen is open."""

        from kivymd.uix.card import MDCardPost

        def callback(instance, value):
            if value is None:
                toast("Delete post %s" % str(instance))
            elif isinstance(value, int):
                toast("Set like in %d stars" % value)
            elif isinstance(value, str):
                toast("Repost with %s " % value)
            elif isinstance(value, list):
                toast(value[1])

        if not self.cards_created:
            self.cards_created = True
            menu_items = [{
                "viewclass": "MDMenuItem",
                "text": "Example item %d" % i,
                "callback": self.callback_for_menu_items,
            } for i in range(2)]
            buttons = ["facebook", "vk", "twitter"]

            instance_grid_card.add_widget(
                MDCardPost(text_post="Card with text",
                           swipe=True,
                           callback=callback))
            instance_grid_card.add_widget(
                MDCardPost(
                    right_menu=menu_items,
                    swipe=True,
                    text_post="Card with a button to open the menu MDDropDown",
                    callback=callback,
                ))
            instance_grid_card.add_widget(
                MDCardPost(
                    likes_stars=True,
                    callback=callback,
                    swipe=True,
                    text_post="Card with asterisks for voting.",
                ))

            image_for_card = (
                f"{demos_assets_path}kitten-for_card-1049129_1280-crop.png")
            if not os.path.exists(image_for_card):
                crop_image(
                    (int(Window.width), int(dp(200))),
                    f"{demos_assets_path}kitten-1049129_1280.png",
                    image_for_card,
                )
            instance_grid_card.add_widget(
                MDCardPost(
                    source=image_for_card,
                    tile_text="Little Baby",
                    tile_font_style="H5",
                    text_post="This is my favorite cat. He's only six months "
                    "old. He loves milk and steals sausages :) "
                    "And he likes to play in the garden.",
                    with_image=True,
                    swipe=True,
                    callback=callback,
                    buttons=buttons,
                ))

    def update_screen(self, instance):
        """Set new label on the screen UpdateSpinner."""
        def update_screen(interval):
            self.tick += 1
            if self.tick > 2:
                instance.update = True
                self.tick = 0
                self.data["Update Screen Widget"][
                    "object"].ids.upd_lbl.text = "New string"
                Clock.unschedule(update_screen)

        Clock.schedule_interval(update_screen, 1)

    main_widget = None

    def build(self):
        self.main_widget = Builder.load_string(main_widget_kv)
        return self.main_widget

    def show_popup_screen(self):
        if not self.popup_screen:
            self.popup_screen = self.data["Popup Screen"]["object"].ids.popup
            content_screen = ContentForPopupScreen()
            self.popup_screen.screen = content_screen
            self.popup_screen.padding = dp(10)
            self.popup_screen.background_color = self.theme_cls.primary_color
        self.popup_screen.show()

    def show_user_example_animation_card(self):
        """Create and open instance MDUserAnimationCard
        for the screen UserCard."""

        from kivymd.uix.useranimationcard import MDUserAnimationCard

        def main_back_callback():
            toast("Close card")

        if not self.user_card:
            image_for_user_card = (
                f"{demos_assets_path}guitar-for-user-card1139397_1280-crop.png"
            )
            if not os.path.exists(image_for_user_card):
                crop_image(
                    (int(Window.width), int(dp(Window.height * 40 // 100))),
                    f"{demos_assets_path}guitar-1139397_1280.png",
                    image_for_user_card,
                )

            self.user_card = MDUserAnimationCard(
                user_name="Lion Lion",
                path_to_avatar=image_for_user_card,
                callback=main_back_callback,
            )
            self.user_card.box_content.add_widget(ContentForAnimCard())
        self.user_card.open()

    def show_example_snackbar(self, snack_type):
        """Create and show instance Snackbar for the screen MySnackBar."""
        def callback(instance):
            toast(instance.text)

        def wait_interval(interval):
            self._interval += interval
            if self._interval > self.my_snackbar.duration:
                anim = Animation(y=dp(10), d=0.2)
                anim.start(self.data["Snackbars"]["object"].ids.button)
                Clock.unschedule(wait_interval)
                self._interval = 0
                self.my_snackbar = None

        from kivymd.uix.snackbar import Snackbar

        if snack_type == "simple":
            Snackbar(text="This is a snackbar!").show()
        elif snack_type == "button":
            Snackbar(
                text="This is a snackbar",
                button_text="WITH A BUTTON",
                button_callback=callback,
            ).show()
        elif snack_type == "verylong":
            Snackbar(text="This is a very very very very very very very "
                     "long snackbar!").show()
        elif snack_type == "float":
            if not self.my_snackbar:
                self.my_snackbar = Snackbar(
                    text="This is a snackbar!",
                    button_text="Button",
                    duration=3,
                    button_callback=callback,
                )
                self.my_snackbar.show()
                anim = Animation(y=dp(72), d=0.2)
                anim.bind(on_complete=lambda *args: Clock.schedule_interval(
                    wait_interval, 0))
                anim.start(self.data["Snackbars"]["object"].ids.button)

    def show_example_input_dialog(self):
        """Creates an instance of the dialog box and displays it
        on the screen for the screen Dialogs."""
        def result(text_button, instance):
            toast(instance.text_field.text)

        if not self.input_dialog:
            from kivymd.uix.dialog import MDInputDialog

            self.input_dialog = MDInputDialog(
                title="Title",
                hint_text="Hint text",
                size_hint=(0.8, 0.4),
                text_button_ok="Ok",
                events_callback=result,
            )
        self.input_dialog.open()

    def show_example_alert_dialog(self):
        if not self.alert_dialog:
            from kivymd.uix.dialog import MDDialog

            self.alert_dialog = MDDialog(
                title="Title",
                size_hint=(0.8, 0.4),
                text_button_ok="Ok",
                text="This is Alert dialog",
                events_callback=self.callback_for_menu_items,
            )
        self.alert_dialog.open()

    def show_example_ok_cancel_dialog(self):
        if not self.ok_cancel_dialog:
            from kivymd.uix.dialog import MDDialog

            self.ok_cancel_dialog = MDDialog(
                title="Title",
                size_hint=(0.8, 0.4),
                text_button_ok="Ok",
                text="This is Ok Cancel dialog",
                text_button_cancel="Cancel",
                events_callback=self.callback_for_menu_items,
            )
        self.ok_cancel_dialog.open()

    def show_example_long_dialog(self):
        if not self.long_dialog:
            from kivymd.uix.dialog import MDDialog

            self.long_dialog = MDDialog(
                text="Lorem ipsum dolor sit amet, consectetur adipiscing "
                "elit, sed do eiusmod tempor incididunt ut labore et "
                "dolore magna aliqua. Ut enim ad minim veniam, quis "
                "nostrud exercitation ullamco laboris nisi ut aliquip "
                "ex ea commodo consequat. Duis aute irure dolor in "
                "reprehenderit in voluptate velit esse cillum dolore eu "
                "fugiat nulla pariatur. Excepteur sint occaecat "
                "cupidatat non proident, sunt in culpa qui officia "
                "deserunt mollit anim id est laborum.",
                title="Title",
                size_hint=(0.8, 0.4),
                text_button_ok="Yes",
                events_callback=self.callback_for_menu_items,
            )
        self.long_dialog.open()

    def get_time_picker_date(self, time):
        """Get date for MDTimePicker from the screen Pickers."""

        self.data["Pickers"]["object"].ids.time_picker_label.text = str(time)
        self.previous_time = time

    def show_example_time_picker(self):
        """Show MDTimePicker from the screen Pickers."""

        from kivymd.uix.picker import MDTimePicker

        time_dialog = MDTimePicker(self.get_time_picker_date)

        if self.data["Pickers"][
                "object"].ids.time_picker_use_previous_time.active:
            try:
                time_dialog.set_time(self.previous_time)
            except AttributeError:
                pass
        time_dialog.open()

    def set_previous_date(self, date_obj):
        """Set previous date for MDDatePicker from the screen Pickers."""

        self.previous_date = date_obj
        self.data["Pickers"]["object"].ids.date_picker_label.text = str(
            date_obj)

    def show_example_date_picker(self):
        """Show MDDatePicker from the screen Pickers."""

        from kivymd.uix.picker import MDDatePicker

        if self.data["Pickers"][
                "object"].ids.date_picker_use_previous_date.active:
            pd = self.previous_date
            try:
                MDDatePicker(self.set_previous_date, pd.year, pd.month,
                             pd.day).open()
            except AttributeError:
                MDDatePicker(self.set_previous_date).open()
        else:
            MDDatePicker(self.set_previous_date).open()

    def show_example_bottom_sheet(self):
        """Show menu from the screen BottomSheet."""

        from kivymd.uix.bottomsheet import MDListBottomSheet

        if not self.bs_menu_1:
            self.bs_menu_1 = MDListBottomSheet()
            self.bs_menu_1.add_item(
                "Here's an item with text only",
                lambda x: self.callback_for_menu_items(
                    "Here's an item with text only"),
            )
            self.bs_menu_1.add_item(
                "Here's an item with an icon",
                lambda x: self.callback_for_menu_items(
                    "Here's an item with an icon"),
                icon="clipboard-account",
            )
            self.bs_menu_1.add_item(
                "Here's another!",
                lambda x: self.callback_for_menu_items("Here's another!"),
                icon="nfc",
            )
        self.bs_menu_1.open()

    def show_example_grid_bottom_sheet(self):
        """Show menu from the screen BottomSheet."""

        if not self.bs_menu_2:
            from kivymd.uix.bottomsheet import MDGridBottomSheet

            self.bs_menu_2 = MDGridBottomSheet()
            self.bs_menu_2.add_item(
                "Facebook",
                lambda x: self.callback_for_menu_items("Facebook"),
                icon_src="./assets/facebook-box.png",
            )
            self.bs_menu_2.add_item(
                "YouTube",
                lambda x: self.callback_for_menu_items("YouTube"),
                icon_src="./assets/youtube-play.png",
            )
            self.bs_menu_2.add_item(
                "Twitter",
                lambda x: self.callback_for_menu_items("Twitter"),
                icon_src="./assets/twitter.png",
            )
            self.bs_menu_2.add_item(
                "Da Cloud",
                lambda x: self.callback_for_menu_items("Da Cloud"),
                icon_src="./assets/cloud-upload.png",
            )
            self.bs_menu_2.add_item(
                "Camera",
                lambda x: self.callback_for_menu_items("Camera"),
                icon_src="./assets/camera.png",
            )
        self.bs_menu_2.open()

    def set_title_toolbar(self, title):
        """Set string title in MDToolbar for the whole application."""

        self.main_widget.ids.toolbar.title = title

    def set_appbar(self):
        """Create MDBottomAppBar for the screen BottomAppBar."""

        from kivymd.uix.toolbar import MDBottomAppBar

        def press_button(inctance):
            toast("Press Button")

        self.md_app_bar = MDBottomAppBar(
            md_bg_color=self.theme_cls.primary_color,
            left_action_items=[
                ["menu", lambda x: x],
                ["clock", lambda x: x],
                ["dots-vertical", lambda x: x],
            ],
            anchor="right",
            callback=press_button,
        )

    def move_item_menu(self, anchor):
        """Sets icons in MDBottomAppBar for the screen BottomAppBar."""

        md_app_bar = self.md_app_bar
        if md_app_bar.anchor != anchor:
            if len(md_app_bar.right_action_items):
                md_app_bar.left_action_items.append(
                    md_app_bar.right_action_items[0])
                md_app_bar.right_action_items = []
            else:
                left_action_items = md_app_bar.left_action_items
                action_items = left_action_items[0:2]
                md_app_bar.right_action_items = [left_action_items[-1]]
                md_app_bar.left_action_items = action_items

    def show_password(self, field, button):
        """
        Called when you press the right button in the password field
        for the screen TextFields.

        instance_field: kivy.uix.textinput.TextInput;
        instance_button: kivymd.button.MDIconButton;

        """

        # Show or hide text of password, set focus field
        # and set icon of right button.
        field.password = not field.password
        field.focus = True
        button.icon = "eye" if button.icon == "eye-off" else "eye-off"

    def set_error_message(self, *args):
        """Checks text of TextField with type "on_error"
        for the screen TextFields."""

        text_field_error = args[0]
        if len(text_field_error.text) == 2:
            text_field_error.error = True
        else:
            text_field_error.error = False

    def set_list_md_icons(self, text="", search=False):
        """Builds a list of icons for the screen MDIcons."""
        def add_icon_item(name_icon):
            self.main_widget.ids.scr_mngr.get_screen(
                "md icons").ids.rv.data.append({
                    "viewclass":
                    "MDIconItemForMdIconsList",
                    "icon":
                    name_icon,
                    "text":
                    name_icon,
                    "callback":
                    self.callback_for_menu_items,
                })

        self.main_widget.ids.scr_mngr.get_screen("md icons").ids.rv.data = []
        for name_icon in md_icons.keys():
            if search:
                if text in name_icon:
                    add_icon_item(name_icon)
            else:
                add_icon_item(name_icon)

    def set_source_code_file(self):
        """Assigns the file_source_code attribute the file name
        with example code for the current screen."""

        if self.main_widget.ids.scr_mngr.current == "code viewer":
            return

        has_screen = False
        for name_item_drawer in self.data.keys():
            if (self.data[name_item_drawer]["name_screen"] ==
                    self.main_widget.ids.scr_mngr.current):
                self.file_source_code = self.data[name_item_drawer].get(
                    "source_code", None)
                has_screen = True
                break
        if not has_screen:
            self.file_source_code = None

    def open_context_menu_source_code(self, instance):
        def callback_context_menu(icon):
            context_menu.dismiss()

            if not self.file_source_code:
                from kivymd.uix.snackbar import Snackbar

                Snackbar(text="No source code for this example").show()
                return
            if icon == "source-repository":
                if platform in ("win", "linux", "macosx"):
                    webbrowser.open(
                        f"https://github.com/HeaTTheatR/KivyMD/wiki/"
                        f"{os.path.splitext(self.file_source_code)[0]}")
                return
            elif icon == "language-python":
                self.main_widget.ids.scr_mngr.current = "code viewer"
                if self.file_source_code:
                    with open(
                            f"{self.directory}/KivyMD.wiki/{self.file_source_code}"
                    ) as source_code:
                        self.data["Source code"][
                            "object"].ids.code_input.text = source_code.read()

        menu_for_context_menu_source_code = []
        data = {
            "Source code": "language-python",
            "Open in Wiki": "source-repository",
        }
        if self.main_widget.ids.scr_mngr.current == "code viewer":
            data = {"Open in Wiki": "source-repository"}
        for name_item in data.keys():
            menu_for_context_menu_source_code.append({
                "viewclass":
                "MDIconItemForMdIconsList",
                "text":
                name_item,
                "icon":
                data[name_item],
                "text_color": [1, 1, 1, 1],
                "callback":
                lambda x=name_item: callback_context_menu(x),
            })
        context_menu = MDDropdownMenu(
            items=menu_for_context_menu_source_code,
            max_height=dp(260),
            width_mult=3,
        )
        context_menu.open(instance.ids.right_actions.children[0])

    def open_menu_for_demo_apps(self, instance):
        """
        Called when you click the "Click me" button on the start screen.
        Creates and opens a list of demo applications.

        :type instance: <kivymd.uix.button.MDRaisedButton object>

        """

        if not self.instance_menu_demo_apps:
            menu_for_demo_apps = []
            for name_item in self.demo_apps_list:
                menu_for_demo_apps.append({
                    "viewclass":
                    "OneLineListItem",
                    "text":
                    name_item,
                    "on_release":
                    lambda x=name_item: self.show_demo_apps(x),
                })
            self.instance_menu_demo_apps = MDDropdownMenu(
                items=menu_for_demo_apps,
                max_height=dp(260),
                width_mult=4,
                _center=True,
            )
        self.instance_menu_demo_apps.open(instance)

    def show_demo_apps(self, name_item):
        self.show_screens_demo(name_item)
        self.main_widget.ids.scr_mngr.current = name_item.lower()
        self.instance_menu_demo_apps.dismiss()

    def on_pause(self):
        return True

    def on_start(self):
        def _load_kv_for_demo(name_screen):
            from demo_apps.formone import FormOne
            from demo_apps.shopwindow import ShopWindow
            from demo_apps.coffeemenu import CoffeeMenu
            from demo_apps.fitnessclub import FitnessClub
            from demo_apps.accountpage import AccountPage

            Builder.load_string(self.data_for_demo[name_screen]["kv_string"])
            self.data_for_demo[name_screen]["object"] = eval(
                self.data_for_demo[name_screen]["class"])
            self.main_widget.ids.scr_mngr.add_widget(
                self.data_for_demo[name_screen]["object"])

        async def load_all_kv_files():
            for name_screen in self.data.keys():
                await asynckivy.sleep(0)
                self.dialog_load_kv_files.name_kv_file = name_screen
                Builder.load_string(self.data[name_screen]["kv_string"])
                self.data[name_screen]["object"] = eval(
                    self.data[name_screen]["Factory"])
                if name_screen == "Bottom App Bar":
                    self.set_appbar()
                    self.data[name_screen]["object"].add_widget(
                        self.md_app_bar)
                self.main_widget.ids.scr_mngr.add_widget(
                    self.data[name_screen]["object"])
                if name_screen == "Text fields":
                    self.data[name_screen]["object"].ids.text_field_error.bind(
                        on_text_validate=self.set_error_message,
                        on_focus=self.set_error_message,
                    )
                elif name_screen == "MD Icons":
                    self.set_list_md_icons()
                elif name_screen == "Tabs":
                    self.build_tabs()
                elif name_screen == "Refresh Layout":
                    self.set_list_for_refresh_layout()

            from demo_apps.formone import registration_form_one
            from demo_apps.shopwindow import screen_shop_window
            from demo_apps.coffeemenu import screen_coffee_menu
            from demo_apps.fitnessclub import screen_fitness_club
            from demo_apps.accountpage import screen_account_page

            data = {
                "Registration": registration_form_one,
                "Shop Window": screen_shop_window,
                "Coffee Menu": screen_coffee_menu,
                "Fitness Club": screen_fitness_club,
                "Account Page": screen_account_page,
            }

            for name_screen in data.keys():
                await asynckivy.sleep(0)
                self.dialog_load_kv_files.name_kv_file = name_screen
                self.data_for_demo[name_screen]["kv_string"] = data[
                    name_screen]
                _load_kv_for_demo(name_screen)

            self.dialog_load_kv_files.dismiss()

        self.dialog_load_kv_files = DialogLoadKvFiles()
        self.dialog_load_kv_files.open()
        asynckivy.start(load_all_kv_files())

    def on_stop(self):
        pass

    def open_settings(self, *args):
        return False
コード例 #21
0
ファイル: settings.py プロジェクト: disissaikat/cfc_2020
class SettingsWindow(Screen):
    def load_settings_page(self):
        ContentNavigationDrawer.populateNavDrawerValues(self)
        query = f'''SELECT CONTACT_ID, EMAIL FROM CONTACT
        WHERE CONTACT_ID={globalvariables.var_userid} '''
        # run direct SQL
        stmt = ibm_db.exec_immediate(connection.conn, query)
        contact = ibm_db.fetch_both(stmt)
        print(globalvariables.var_email)
        self.ids['uname'].text = globalvariables.var_email

    def update_settings(self, uname, pwd1, pwd2):
        email = uname.text
        pwd1 = pwd1.text
        pwd2 = pwd2.text
        regex = '^[a-z0-9]+[\._]?[a-z0-9]+[@]\w+[.]\w{2,3}$'
        valid_str = ""
        if globalvariables.var_email != email:
            if email == "":
                valid_str = "Email is blank"
            if re.search(regex, email) is None:
                valid_str = "Email is not valid"
        if pwd1 != None:
            if pwd1 != pwd2:
                valid_str = "Passwords not matching"
        if valid_str != "":
            ok_button = MDFlatButton(text='OK', on_release=self.dialog_close)
            self.dialog = MDDialog(title='Alert !',
                                   text=valid_str,
                                   size_hint=(0.7, 1),
                                   buttons=[ok_button])
            self.dialog.open()
        else:
            if globalvariables.var_email != email:
                query = f'''UPDATE CONTACT SET EMAIL='{email}'
                WHERE CONTACT_ID={globalvariables.var_userid} '''
                # run direct SQL
                stmt = ibm_db.exec_immediate(connection.conn, query)
                email_change_mail(globalvariables.var_email,
                                  globalvariables.var_fname)
                globalvariables.var_email = email
                self.ids['uname'].text = globalvariables.var_email
            if pwd1 != "":
                encrypted_pwd = encrypt_pwd(pwd1)
                query = f'''UPDATE CONTACT SET PASSCODE={repr(encrypted_pwd)}
                WHERE CONTACT_ID={globalvariables.var_userid} '''
                # run direct SQL
                stmt = ibm_db.exec_immediate(connection.conn, query)
                password_change_mail(globalvariables.var_email,
                                     globalvariables.var_fname)
                self.ids['pwd1'].text = ""
                self.ids['pwd2'].text = ""
            if globalvariables.var_img_path != "":
                img_path = globalvariables.var_img_path
                img_tgt_name = str(globalvariables.var_userid) + ".png"
                upload_contact_image(img_path, img_tgt_name)
                globalvariables.var_img_path = ""
                ContentNavigationDrawer.populateNavDrawerValues(self)
            self.snackbar = Snackbar(text="Profile Updated!")
            self.snackbar.show()

    def dialog_close(self, obj):
        self.dialog.dismiss()
コード例 #22
0
class MyPaintWidget(Widget):
    drawing_mode_select_btn = ObjectProperty()
    down_current_color_label = ObjectProperty()
    down_current_line_width = ObjectProperty()
    down_current_nums_of_lines = ObjectProperty()
    down_current_icon = ObjectProperty()
    top_toolbox = ObjectProperty()
    down_toolbox = ObjectProperty()
    minimize_btn = ObjectProperty()

    undolist = []  # list of cancelled lines
    lineslist = []  # list of drawing lines
    drawing = False
    # settings
    DRAWING_MODE = 'radian'
    NUMBER_OF_LINES = 15
    LINE_WIDTH = 1
    COLOR = (.32, .5, 1, 1)
    BACKGROUND_COLOR = ListProperty([0, 0, 0, 1])
    CENTER_COLOR = ListProperty([.5, .5, .5, 1])
    IS_LINE_CLOSE = False
    TEXTURE = GRADIENT_DATA_BRIGHTER
    BLUUR_SIZE = NumericProperty(0.1)
    PIXEL_SIZE = NumericProperty(1)

    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.size = Window.size
        self.size_hint = None, None
        self.create_color_popup()
        self.create_settings_popup()
        self.create_number_of_lines_dropdown()
        self.create_drawing_mode_dropdown()
        self.create_lines_width_dropdown()
        self.init_animations()
        self.create_snackbars()
        self.init_texture()

    def init_texture(self):
        '''create texture for lines'''
        self.tex = Texture.create(size=(1, 64),
                                  colorfmt='rgb',
                                  bufferfmt='ubyte')
        self.tex.blit_buffer(self.TEXTURE, colorfmt='rgb')

    def create_snackbars(self):
        '''Snackbars with saving info'''
        self.snackbar_success = Snackbar(text='Successful saving!')
        self.snackbar_error = Snackbar()

    def init_animations(self):
        '''create tollbox minimize animations'''
        self.minimize_btn_anim = Animation(pos_hint={
            'x': .85,
            'y': .01
        },
                                           t='in_out_back',
                                           duration=.15)
        self.maximize_btn_anim = Animation(pos_hint={
            'x': .85,
            'y': .06
        },
                                           t='in_out_back',
                                           duration=.15)
        self.maximize_top_toolbox_anim = Animation(pos_hint={
            'x': 0,
            'y': 0.9
        },
                                                   t='in_circ',
                                                   duration=.1)
        self.minimize_top_tollbox_anim = Animation(pos_hint={
            'x': 0,
            'y': 1
        },
                                                   t='in_circ',
                                                   duration=.1)
        self.maximize_down_tollbox_anim = Animation(pos_hint={
            'x': 0,
            'y': 0
        },
                                                    t='in_circ',
                                                    duration=.1)
        self.minimize_down_tollbox_anim = Animation(pos_hint={
            'x': 0,
            'y': -0.1
        },
                                                    t='in_circ',
                                                    duration=.1)

    def minimize_maximize_toolboxes(self, current):
        if current == 'arrow-down':
            # minimize
            self.minimize_top_tollbox_anim.start(self.top_toolbox)
            self.minimize_down_tollbox_anim.start(self.down_toolbox)
            self.minimize_btn.icon = 'arrow-up'
            self.minimize_btn_anim.start(self.minimize_btn)
        elif current == 'arrow-up':
            # maximize
            self.maximize_top_toolbox_anim.start(self.top_toolbox)
            self.maximize_down_tollbox_anim.start(self.down_toolbox)
            self.minimize_btn.icon = 'arrow-down'
            self.maximize_btn_anim.start(self.minimize_btn)

    #-----------------------#
    #-Settings Popup window-#
    #-----------------------#

    def create_settings_popup(self):
        '''Creating a drawing settings window'''
        self.settings_popup = SettingsPopup(self)

    def open_settings_popup(self):
        '''open popup window'''
        self.settings_popup.open()

    #---------------------#
    #------DropDowns------#
    #---------------------#

    def create_drawing_mode_dropdown(self):
        '''creating a menu for switching drawing modes'''
        self.dropdown_drawing_mode = CustomDropDownDrawingMode()
        self.dropdown_drawing_mode.bind(
            on_select=lambda instance, x: self.drawing_mode_custom_setattr(
                x[0], x[1]))

    def create_number_of_lines_dropdown(self):
        self.number_of_lines_dropdown = CustomDropDownNumberOfLines(
            self.NUMBER_OF_LINES, self)

    def create_lines_width_dropdown(self):
        self.line_width_dropdown = CustomDropDownLineWidth(
            self.LINE_WIDTH, self)

    # set down values
    def set_line_width(self, value):
        self.LINE_WIDTH = value
        self.down_current_line_width.text = f'Width\n{value}'

    def set_number_of_lines(self, value):
        self.NUMBER_OF_LINES = value
        self.down_current_nums_of_lines.text = f'Lines\n{value}'

    def drawing_mode_custom_setattr(self, mode, icon):
        '''setting the current drawing mode and icon'''
        setattr(self.down_current_icon, 'icon', icon)
        self.DRAWING_MODE = mode

    #--------------------#
    #-Color Popup window-#
    #--------------------#
    def create_color_popup(self):
        self.color_popup = MyPopup()
        self.color_popup.title = 'Colors'
        bxl = BoxLayout(orientation='vertical', padding=25)
        clr_picker = ColorPicker(color=self.COLOR)
        clr_picker.bind(color=self.on_color)
        bxl.add_widget(clr_picker)
        self.random_color_select = MDSwitch()
        radmcolrbx = BoxLayout(size_hint=(1, .15))
        radmcolrbx.add_widget(Label(text='Use random colors:'))
        radmcolrbx.add_widget(self.random_color_select)
        bxl.add_widget(radmcolrbx)
        bxl.add_widget(
            MDRectangleFlatButton(
                text="Close",
                size_hint=(1, .1),
                on_release=lambda btn: self.color_popup.dismiss()))
        self.color_popup.add_widget(bxl)

    def open_color_popup(self):
        self.color_popup.open()

    def on_color(self, instance, value):
        self.COLOR = value
        self.down_current_color_label.canvas.children[3] = Color(*value)

    #-------------------#
    #-DRAWING FUNCTIONS-#
    #-------------------#
    def on_touch_up(self, touch):
        '''disabling drawing'''
        self.drawing = False

        # protection against memory overuse
        if len(self.undolist) > 5:
            self.undolist = self.undolist[len(self.undolist) - 5:]
        if len(self.lineslist) > 5:
            self.lineslist = self.lineslist[len(self.lineslist) - 5:]

    def on_touch_move(self, touch):
        '''drawing'''
        def vector_length(coords, center):
            return math.sqrt((coords[0] - center[0])**2 +
                             (coords[1] - center[1])**2)

        if self.drawing:
            # Continue drawing line
            if self.DRAWING_MODE == 'simple':
                self.obj.children[-1].points += touch.pos
            elif self.DRAWING_MODE == 'symmetric':
                self.obj.children[-1].points += touch.pos
                self.obj.children[-3].points += (Window.size[0] - touch.pos[0],
                                                 touch.pos[1])
            elif self.DRAWING_MODE == 'square':
                self.obj.children[-1].points += touch.pos
                self.obj.children[-3].points += (touch.pos[0],
                                                 Window.size[1] - touch.pos[1])
                self.obj.children[-5].points += (Window.size[0] - touch.pos[0],
                                                 touch.pos[1])
                self.obj.children[-7].points += (Window.size[0] - touch.pos[0],
                                                 Window.size[1] - touch.pos[1])
            elif self.DRAWING_MODE == 'radian' or self.DRAWING_MODE == 'radian-symmetric':
                center = (Window.size[0] // 2, Window.size[1] // 2)
                dx = touch.pos[0] - center[0]
                dy = touch.pos[1] - center[1]
                vector = vector_length(touch.pos, center)
                if dx != 0:
                    angle = 360 / self.NUMBER_OF_LINES
                    alpha_radian = math.atan(dy / dx)
                    alpha_degree = alpha_radian * 180 / math.pi
                    if dx < 0:
                        alpha_degree = 180 + alpha_degree
                    self.obj.children[-1].points += touch.pos
                    line_number = -3
                    for i in range(1, self.NUMBER_OF_LINES):
                        self.obj.children[line_number].points += (
                            center[0] + vector *
                            math.cos(math.radians(alpha_degree + (angle * i))),
                            center[1] + vector *
                            math.sin(math.radians(alpha_degree + (angle * i))))
                        line_number -= 2
                    if self.DRAWING_MODE == 'radian-symmetric':
                        for i in range(0, self.NUMBER_OF_LINES):
                            self.obj.children[line_number].points += (
                                center[0] - vector * math.cos(
                                    math.radians(alpha_degree +
                                                 (angle * i - 45))),
                                center[1] + vector * math.sin(
                                    math.radians(alpha_degree +
                                                 (angle * i - 45))))
                            line_number -= 2
        else:
            # Start drawing line
            self.drawing = True
            self.obj = InstructionGroup()

            if self.random_color_select.active:
                self.on_color(
                    None,
                    (random.random(), random.random(), random.random(), 1))

            self.obj.add(Color(*self.COLOR))

            lines = {
                'simple': 1,
                'symmetric': 2,
                'square': 4,
                'radian': self.NUMBER_OF_LINES,
                'radian-symmetric': self.NUMBER_OF_LINES * 2
            }

            for _ in range(lines[self.DRAWING_MODE]):
                self.obj.add(
                    Line(width=self.LINE_WIDTH,
                         close=self.IS_LINE_CLOSE,
                         texture=self.tex))

            self.lineslist.append(self.obj)
            self.canvas.add(self.obj)

    #------------------#
    #-SYSTEM FUNCTIONS-#
    #------------------#
    def undo(self):
        '''delete last line'''
        if self.lineslist:
            item = self.lineslist.pop(-1)
            self.undolist.append(item)
            self.canvas.remove(item)

    def redo(self):
        '''return last line'''
        if self.undolist:
            item = self.undolist.pop(-1)
            self.lineslist.append(item)
            self.canvas.add(item)

    def clear_canvas(self):
        self.canvas.clear()
        self.undolist = []
        self.lineslist = []

    def save_canvas(self):
        name = f'Art{datetime.date.today()}-{random.randint(1,100000)}.png'
        try:
            if ANDROID:
                directory = os.path.join('/sdcard', 'RadianMirrorApp')
                if not os.path.exists(directory):
                    os.makedirs(directory)
                self.parent.export_to_png(os.path.join(directory, name))
            else:
                self.parent.export_to_png(name)
            self.snackbar_success.show()
        except Exception as err:
            self.snackbar_error.text = f'Error: "{err}"'
            self.snackbar_error.show()
コード例 #23
0
class Application(MDApp):

    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        # Läd .kv Datei
        # https://kivy.org/doc/stable/api-kivy.lang.builder.html?highlight=builder# für mehr Info
        self.kv = Builder.load_file("KV.kv")
        self.filtered = True
        self.running_processes, self.stopped_processes = self.get_processes(False)
        self.tracking = False
        # Snackbar Objekt
        # https://kivymd.readthedocs.io/en/0.104.0/components/snackbar/index.html für mehr Info
        self.snack1 = Snackbar(text="Select applications to track")
        self.snack2 = Snackbar(text="Turn off tracking to select/deselect applications")
        self.processes_objs_list = []
        self.processes_names_dict = {}
    
    # build() wird nach __init__() zum Programmstart ausgeführt
    def build(self):
        # Icons werden nicht angezeigt
        # Das Popup Menu ist hässlig formatiert, ich kriegs aber einfach nicht besser hin :(
        menu_items = [
            {
                "viewclass": "OneLineListItem",
                "icon": "filter-outline",
                "text": "Filtered"
            }, 
            {
                "viewclass": "OneLineListItem",
                "icon": "format-list-bulleted",
                "text": "Everything"
            }]
        # Position des Symbols in Toolbar wird nicht aktualisiert, wenn die Fenstergröße verstellt wird --> fix
        # Dropdown Menü Objekt
        # https://kivymd.readthedocs.io/en/0.104.0/components/dropdown-item/index.html für mehr Info
        self.filter_menu = MDDropdownMenu(items=menu_items, width_mult=3.5, caller=self.kv.ids.toolbar.children[0], callback=self.filter_menu_close)
        return self.kv

    # on_start wird nach build() zum Programmstart ausgeführt
    def on_start(self):
        self.create_list()
    
    # Für jeden laufenden Process wird ein Listenobjekt erstellt
    def create_list(self) -> None:
        self.processes_objs_list = []
        for c, i in enumerate(self.running_processes):
            # Läd String im .kv Format
            item = Builder.load_string(LIST_ITEM)
            item.text = i
            self.processes_objs_list.append(item)
            self.processes_names_dict[i] = False
            # Objekt wird mit ID gesucht und zum Renderer hinzugefügt
            self.root.ids.processes.add_widget(self.processes_objs_list[c])

    # Gibt zwei Dictionaries zurück, die alle zur Zeit laufenden und gestoppten Prozesse beinhalten
    # key --> name
    # value --> pid
    def get_processes(self, force_unfiltered_processes) -> dict:
        # Das hier muss weg!
        if force_unfiltered_processes:
            self.filtered = False

        running_processes = {}
        stopped_processes = {}
        # Geht hier bitte nochmal drüber. Ich hab lediglich geschätzt was Windows sein könnte und was nicht
        # Liste an Prozessen die rausgefiltert werden
        windows_processes = ["System Idle Process", "System", "RuntimeBroker.exe", "Registry", "svchost.exe", "smss.exe", "lsass.exe",
                            "services.exe", "csrss.exe", "fontdrvhost.exe", "wininit.exe", "AppVShNotify.exe", "MemCompression", "powershell.exe",
                            "UserOOBEBroker.exe", "spoolsv.exe", "RtkAudUService64.exe", "MoUsoCoreWorker.exe", "nvcontainer.exe", "SafeConnect.ServiceHost.exe",
                            "MsMpEng.exe", "SgrmBroker.exe", "dasHost.exe", "sihost.exe", "NisSrv.exe", "CompPkgSrv.exe", "GoogleCrashHandler.exe", 
                            "GoogleCrashHandler64.exe", "taskhostw.exe", "YourPhoneServer.exe", "dllhost.exe", "conhost.exe", "SearchIndexer.exe", "dwm.exe",
                            "McCSPServiceHost.exe", "SecurityHealthService.exe", "SettingSyncHost.exe", "ctfmon.exe", "StartMenuExperienceHost.exe",
                            "nvsphelper64.exe", "SearchProtocolHost.exe", "SearchFilterHost.exe", "winlogon.exe", "audiodg.exe", "SecurityHealthSystray.exe",
                            "SystemSettingsBroker.exe", "ApplicationFrameHost.exe", "TextInputHost.exe", "WmiPrvSE.exe"]

        # Iteriert durch alle laufenden Prozesse
        # Wenn self.filter == True --> werden nur die Prozesse angezeigt, die nicht in windows_processes sind
        # self.filter wird in __init__() deklariert und in filter_menu_close() verändert
        for process in psu.process_iter():
            if not self.filtered or not process.name() in windows_processes:
                if process.status() == "running":
                    # unnötige .exe Endung wird vom Anwendungsnamen entfernen
                    name = process.name().split(".exe")[0]
                    running_processes[name] = process.pid
                elif process.status() == "stopped":
                    name = process.name().split(".exe")[0]
                    stopped_processes[name] = process.pid

        return running_processes, stopped_processes

    # Der For-Loop hier funktioniert, ist aber ziemlich ineffizient --> bessere Lösung?
    # Vielleicht sollte dieses System auch generell nochmal überholt werden
    # Wird aufgerufen wenn ein Listenobjekt gedrückt wird
    # Ändert Symbol des Listenobjekts und setzt ausgewählten Prozess in Dict auf True
    def select_item(self, instance, position) -> None:
        # Schaut ob Tracking bereits läuft
        if not self.tracking:
            # Überprüft durch extra Parameter welches Objekt die Funktion aufgerufen hat
            # Je nach instance wird entweder Eltern Objekt oder Kind Objekt für Symbol oder Text Änderungen verwendet
            if position == "IconLeftWidget":
                for i in self.processes_objs_list:
                    if i.text == instance.parent.parent.text:
                        if instance.icon == "checkbox-blank-outline":
                            instance.icon = "checkbox-marked-outline"
                            self.processes_names_dict[i.text] = True
                        elif instance.icon == "checkbox-marked-outline":
                            instance.icon = "checkbox-blank-outline"
                            self.processes_names_dict[i.text] = False
            elif position == "OneLineIconListItem":
                for i in self.processes_objs_list:
                    if i.text == instance.text:
                        if instance.children[0].children[0].icon == "checkbox-blank-outline":
                            instance.children[0].children[0].icon = "checkbox-marked-outline"
                            self.processes_names_dict[i.text] = True
                        elif instance.children[0].children[0].icon == "checkbox-marked-outline":
                            instance.children[0].children[0].icon = "checkbox-blank-outline"
                            self.processes_names_dict[i.text] = False
        # Wenn Tracking läuft, wird Fehlermeldung über Snackbar angezeigt
        # https://kivymd.readthedocs.io/en/0.104.0/components/snackbar/index.html für mehr Info
        else:
            try:
                self.snack2.show()
            # Bringt Ausnahme hervor, wenn die Snackbar bereits angezeigt wird
            except WidgetException:
                pass

    # Wird ausgeführt wenn der Start Knopf gedrückt wird
    # Ändert Symbol und Farbe des Knopfes, sowie eine boolean
    def activate_tracking(self, instance):
        block_action = True

        # Wenn keins der Listenobjekte ausgewählt wurde, wird eine Snackbar mit Warnung angezeigt, 
        # Sowie die weiteren Änderungen übersprungen
        for i in self.processes_names_dict:
            if self.processes_names_dict[i]:
                block_action = False
                break
        else:
            block_action = True
            # Snackbar
            # https://kivymd.readthedocs.io/en/0.104.0/components/snackbar/index.html für mehr Info
            try:
                self.snack1.show()
            # Bringt Ausnahme hervor, wenn die Snackbar bereits angezeigt wird
            except WidgetException:
                pass
        
        if not block_action:
            # Überprüft anhand der Farbe des Knopfes, ob Tracking läuft oder nicht
            # Das ist etwas gay, funktioniert aber
            if instance.md_bg_color == self.theme_cls.primary_color:
                # boolean = True
                self.tracking = True
                # Symbol des Knopfes ändern
                instance.icon = "stop"
                # Farbe des Knopfes ändern (prozentualer rbga Wert als Dezimalzahl)
                instance.md_bg_color = (.79, .22, .29, 1) # --> Rot
            else:
                # boolean = False
                self.tracking = False
                # Symbol des Knopfes ändern
                instance.icon = "play"
                # Farbe des Knopfes ändern (standard Farbe)
                instance.md_bg_color = self.theme_cls.primary_color # --> Blau

    # Läd die Liste an Prozessen neu
    def refresh_processes_list(self):
        self.root.ids.processes.clear_widgets()
        self.running_processes, self.stopped_processes = self.get_processes(False)
        self.create_list()


    # Schließt Dropdown Menü und setzt eine bool auf True oder False
    def filter_menu_close(self, instance):
        if instance.text == "Filtered":
            self.filtered = True
            self.refresh_processes_list()
        elif instance.text == "Everything":
            self.filtered = False
            self.refresh_processes_list()
        # MDDropdownMenu.dismiss() schließt das Dropdown Menü
        # https://kivymd.readthedocs.io/en/0.104.0/components/dropdown-item/index.html für mehr Info
        self.filter_menu.dismiss()
コード例 #24
0
    def exportarPDF(self):  # SE DEBE BUSCAR LA FORMA DE HACERLO GENÉRICO
        """
        import json
        import requests
        headers = {
            "Authorization": "Bearer ya29.a0AfH6SMDhLxJscYf1Cm4vYtjbKSPdHHIeNH3kuelzz6BgQtDk-sobO5Dzw7FwYrGf17vaKIR_qoKChEYXzc9In5lJVoTTAY5yfXdZdFxZdQ6jkZ2lcr2B6N36s5kihOV5xKjZUR5Kdsk39beA0vx7yTisCP3ulOf8fquyUugdXt0"}
        para = {
            "name": "ReporteGastos.pdf",
        }
        files = {
            'data': ('metadata', json.dumps(para), 'application/json; charset=UTF-8'),
            'file': open("./ReporteGastos.pdf", "rb")
        }
        r = requests.post(
            "https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart",
            headers=headers,
            files=files
        )
        print(r.text)
        """
        gauth = GoogleAuth()
        # Try to load saved client credentials
        gauth.LoadCredentialsFile("mycreds.txt")
        if gauth.credentials is None:
            # Authenticate if they're not there
            gauth.LocalWebserverAuth()
        elif gauth.access_token_expired:
            # Refresh them if expired
            gauth.Refresh()
        else:
            # Initialize the saved creds
            gauth.Authorize()
        # Save the current credentials to a file
        gauth.SaveCredentialsFile("mycreds.txt")

        drive = GoogleDrive(gauth)

        folderName = "App Inventario"
        # folder = drive.CreateFile({'title' : folderName, 'mimeType' : 'application/vnd.google-apps.folder'})
        # folder.Upload()

        fileList = drive.ListFile({
            'q': "'root' in parents and trashed=false"
        }).GetList()
        contador = 0

        if len(fileList) == 0:  # No hay archivos
            print("No hay ningun archivo, creando el folder")
            folder = drive.CreateFile({
                'title':
                folderName,
                'mimeType':
                'application/vnd.google-apps.folder'
            })
            folder.Upload()
            contador = -1

        for file in fileList:  # haciendo un for para comprobar los archivos
            # print('Title: %s, ID: %s' % (file['title'], file['id']))
            # Get the folder ID that you want
            if file['title'] == folderName:
                print("Existe el folder necesario")
                contador = -1
                break
            elif file['title'] != folderName:
                print("Archivo sin coincidencia")
                print('Title: %s, ID: %s' % (file['title'], file['id']))
                contador = contador + 1

        if contador == len(
                fileList
        ):  # si son iguales significa que no existe carpeta de la App
            print("Se debe crear el archivo")
            folder = drive.CreateFile({
                'title':
                folderName,
                'mimeType':
                'application/vnd.google-apps.folder'
            })
            folder.Upload()

        #-------Parte de actualizar arc

        folderName = "App Inventario"
        folder_id = ''
        # creacion archivo en un folder específico
        # folders = drive.ListFile(
        # {'q': "title='" + folderName + "' and mimeType='application/vnd.google-apps.folder' and trashed=false"}).GetList()

        file_list = drive.ListFile({
            'q': "'root' in parents and trashed=false"
        }).GetList()

        for file in file_list:
            if (file['title'] == folderName):
                folder_id = file['id']

                break

        # 3) Build string dynamically (need to use escape characters to support single quote syntax)
        str = "\'" + folder_id + "\'" + " in parents and trashed=false"

        # 4) Starting iterating over files
        file_list = drive.ListFile({'q': str}).GetList()
        for file in file_list:
            print('title: %s, id: %s' % (file['title'], file['id']))
            if file['title'] == "ReporteGastos.pdf":
                file.Delete()
        file2 = drive.CreateFile({'parents': [{'id': folder_id}]})
        file2.SetContentFile('ReporteGastos.pdf')
        file2.Upload()

        # Informar que se ha subido el archivo
        snackbar = Snackbar(
            text="Se ha realizado el respaldo del Reporte en Google Drive")
        snackbar.show()
コード例 #25
0
 def show_speech_fail_snackbar(self):
     """
     Shows snackbar that indicates the user failed to speak a word.
     """
     snackbar = Snackbar(text="Try Saying The Word Again")
     snackbar.show()
コード例 #26
0
class TypeToWriteScreen(Screen):

    try:
        #Data Integration

        selection = ListProperty([])
        images = ListProperty(['img/jne.jpg', 'img/tiki.jpg', 'img/pos.jpg'])
        kurirs = ListProperty([
            'img/jne.jpg', 'img/tiki.jpg', 'img/pos.jpg', 'img/anteraja.png',
            'img/sicepat.jpg', 'img/wahana.jpg', 'img/lion.jpg',
            'img/ninja.png', 'img/jnt.jpg'
        ])
        with open('data/date.json', 'r') as f:

            attempts = json.load(f)
        with open('data/easyversion.json', 'r') as f:

            data_tables = json.load(f)

        with open('data/data.json', 'r') as fp:
            data = json.load(fp)

    #Add Item To The List

        def change_image_resi(self, args):
            if args.lower() == 'jne':

                self.ids.addscreen.ids.image.ii = self.kurirs[0]

            if args.lower() == 'tiki':
                self.ids.addscreen.ids.image.ii = self.kurirs[1]
            if args.lower() == 'pos':
                self.ids.addscreen.ids.image.ii = self.kurirs[2]
            if args.lower() == 'jnt':
                self.ids.addscreen.ids.image.ii = self.kurirs[8]
            if args.lower() == 'ninja':
                self.ids.addscreen.ids.image.ii = self.kurirs[7]
            if args.lower() == 'lion':
                self.ids.addscreen.ids.image.ii = self.kurirs[6]
            if args.lower() == 'anteraja':
                self.ids.addscreen.ids.image.ii = self.kurirs[3]
            if args.lower() == 'wahana':
                self.ids.addscreen.ids.image.ii = self.kurirs[5]
            if args.lower() == 'sicepat':
                self.ids.addscreen.ids.image.ii = self.kurirs[4]

        def visualize_json(self):

            self.ids.friendscreen.ids.container.clear_widgets()

            for i in self.data.keys():

                if self.data[i]['kurir'] == 'jne':

                    image = ImageLeftWidget(source=self.kurirs[0])

                if self.data[i]['kurir'] == 'tiki':
                    image = ImageLeftWidget(source=self.kurirs[1])
                if self.data[i]['kurir'] == 'pos':
                    image = ImageLeftWidget(source=self.kurirs[2])
                if self.data[i]['kurir'] == 'jnt':
                    image = ImageLeftWidget(source=self.kurirs[8])
                if self.data[i]['kurir'] == 'ninja':
                    image = ImageLeftWidget(source=self.kurirs[7])
                if self.data[i]['kurir'] == 'lion':
                    image = ImageLeftWidget(source=self.kurirs[6])
                if self.data[i]['kurir'] == 'anteraja':
                    image = ImageLeftWidget(source=self.kurirs[3])
                if self.data[i]['kurir'] == 'wahana':
                    image = ImageLeftWidget(source=self.kurirs[5])
                if self.data[i]['kurir'] == 'sicepat':
                    image = ImageLeftWidget(source=self.kurirs[4])

                isi = TwoLineAvatarListItem(
                    text=self.data[i]['kurir'].upper(),
                    on_press=lambda x, item=i: self.show_dialog5(text=item),
                    secondary_text=i)
                isi.add_widget(image)

                self.ids.friendscreen.ids.container.add_widget(isi)

        def setup(self):

            self.ids.ongkirscreen.ids.province_tujuan.values = list(
                self.data_tables.keys())

            self.ids.ongkirscreen.ids.province.values = list(
                self.data_tables.keys())

        def show_kota(self, text):
            try:

                self.ids.ongkirscreen.ids.kota_tujuan.text = 'Kota Tujuan'

                self.ids.ongkirscreen.ids.kota_tujuan.values = list(
                    self.data_tables[text].keys())
            except:
                pass

        def show_kota1(self, text):
            try:

                self.ids.ongkirscreen.ids.kota.text = 'Kota'

                self.ids.ongkirscreen.ids.kota.values = list(
                    self.data_tables[text].keys())
            except:
                pass

        def hitung(self):

            toast("Counting..........")
            try:
                from rajaOngkirApi import rajaongkirApi
                api = rajaongkirApi(key='23930140f7b47aaebf5318262ee5d0f1',
                                    accountType='starter')

                self.id_origin = self.data_tables[
                    self.ids.ongkirscreen.ids.province.text][
                        self.ids.ongkirscreen.ids.kota.text]

                self.id_destinasi = self.data_tables[
                    self.ids.ongkirscreen.ids.province_tujuan.text][
                        self.ids.ongkirscreen.ids.kota_tujuan.text]
                print(self.id_origin, self.id_destinasi)
                if bool(self.ids.ongkirscreen.ids.weight.text) == False:
                    from kivymd.uix.snackbar import Snackbar
                    snackbar = Snackbar(text="Harap Isi Semuanya",
                                        duration=0.5)
                    snackbar.show()
                else:
                    harga = api.requestApi(
                        origin=self.id_origin,
                        destination=self.id_destinasi,
                        weight=str(self.ids.ongkirscreen.ids.weight.text),
                        courier=self.ids.ongkirscreen.ids.kurir.text.lower())
                    harga = harga.decode('utf-8')

                    harga = json.loads(harga)
                    deskripsi = ''
                    for i in ((harga['rajaongkir']['results'][0]['costs'])):
                        if 'HARI' in i["cost"][0]["etd"]:

                            deskripsi += f' {i["service"]} : Rp {i["cost"][0]["value"]} \n Perkiraan {i["cost"][0]["etd"]}\n'

                        else:
                            print(f'{i["cost"][0]["etd"]}')
                            deskripsi += f' {i["service"]} : Rp {i["cost"][0]["value"]} \n Perkiraan {i["cost"][0]["etd"]} hari\n'

                    if self.ids.ongkirscreen.ids.kurir.text.lower() == 'jne':

                        self.ids.ongkirscreen.ids.image.ii = self.images[0]

                    if self.ids.ongkirscreen.ids.kurir.text.lower() == 'tiki':

                        self.ids.ongkirscreen.ids.image.ii = self.images[1]
                    if self.ids.ongkirscreen.ids.kurir.text.lower() == 'pos':

                        self.ids.ongkirscreen.ids.image.ii = self.images[2]
                    if deskripsi == '':
                        self.ids.ongkirscreen.ids.label.text = 'tidak ada kurir yang tersedia'
                    if deskripsi != '':
                        self.ids.ongkirscreen.ids.label.text = deskripsi
            except:
                from kivymd.uix.snackbar import Snackbar
                snackbar = Snackbar(text="Harap Isi Semuanya", duration=0.5)
                snackbar.show()

        def update_dict(self):
            currentMonth = datetime.datetime.now().month
            currentYear = datetime.datetime.now().year
            new = self.get_datetime_range(currentYear, currentMonth)
            new = [str(i) for i in new]

            with open('data/date.json', 'r') as fppp:

                self.attempts = json.load(fppp)
            try:
                for i in self.attempts.copy().keys():

                    if i not in new:
                        del self.attempts[i]
            except:
                pass

            with open('data/date.json', 'w') as fppppp:
                json.dump(self.attempts, fppppp)

        def get_datetime_range(self, year, month):
            nb_days = monthrange(year, month)[1]

            return [
                datetime.date(year, month, day)
                for day in range(1, nb_days + 1)
            ]

        def copy_details(self, details):
            Clipboard.copy(details)

        def set_label(self):
            mydate = datetime.datetime.now()

            self.ids.piechart.label.text = f'Total Usages In {(mydate.strftime("%B"))}'

        def change_screen(self, screen, *args):

            self.ids.screen_manager.current = screen

        def make_json(self):
            from tes import check_resi
            try:
                if self.ids.addscreen.ids.no_resi.text in self.data:
                    from kivymd.uix.snackbar import Snackbar
                    self.snackbar = Snackbar(text="Sudah Ad Resi Yg Sama",
                                             duration=0.5)
                    self.snackbar.show()
                else:
                    if check_resi(self.ids.addscreen.ids.kurir.text.lower(
                    ), self.ids.addscreen.ids.no_resi.text)['error'] == True:
                        from kivymd.uix.snackbar import Snackbar
                        self.snackbar = Snackbar(
                            text="Salah Resi Atau Salah Kurir", duration=0.5)
                        self.snackbar.show()
            except KeyError:
                if self.ids.addscreen.ids.no_resi.text in self.data:
                    from kivymd.uix.snackbar import Snackbar
                    self.snackbar = Snackbar(text="Sudah Ad Resi Yg Sama",
                                             duration=0.5)
                    self.snackbar.show()
                else:
                    with open('data/data.json', 'w') as f:

                        from kivymd.uix.snackbar import Snackbar
                        self.snackbar = Snackbar(text="Details Saved",
                                                 duration=1.0)
                        self.snackbar.show()
                        self.data[self.ids.addscreen.ids.no_resi.text] = {}
                        self.data[self.ids.addscreen.ids.no_resi.text][
                            'kurir'] = self.ids.addscreen.ids.kurir.text.lower(
                            )

                        print(self.data)
                        json.dump(self.data, f)
                        self.visualize_json()
                        self.ids.addscreen.go_friend()

        def show_dialog5(self, *args, text):

            from tes import check_resi
            deskripsi = check_resi(self.data[text]['kurir'], text)
            self.deskripsi = deskripsi["data"]["detail"]
            self.dialog = MDDialog(
                title='DETAILS',
                text=f'PENERIMA: {self.deskripsi["receiver"]}\n'
                f'STATUS: {self.deskripsi["status"]}\n'
                f'DIKIRIM: {self.deskripsi["date_shipment"]}\n'
                f'DITERIMA: {self.deskripsi["date_received"]}\n',
                size_hint=(0.8, 1),
                buttons=[
                    MDFlatButton(text='Close', on_release=self.close_dialog),
                    MDFlatButton(
                        text='Delete',
                        on_release=lambda x, item=text: self.delete(item)),
                    MDRaisedButton(text='See Details',
                                   on_release=lambda x, item=text: self.
                                   change_name(text=item))
                ])

            self.dialog.open()

        def delete(self, *name):
            try:
                name = name[0]
                toast('Delete Success')
                del self.data[name]
                with open('data/data.json', 'w') as f:

                    json.dump(self.data, f)
                self.visualize_json()
                self.close_dialog()
            except:
                pass

        def change_name(self, *args, text):
            print(text)
            self.change_screen('editscreen')
            self.dialog.dismiss()
            self.deskripsi['history'].reverse()
            self.ids.editscreen.ids.container.clear_widgets()
            for i in self.deskripsi['history']:

                isi = ThreeLineListItem(text=i["position"],
                                        secondary_text=i["time"],
                                        tertiary_text=i["desc"],
                                        on_press=lambda x, item=i: self.
                                        copy_details(f'{i["position"]}\n'
                                                     f'{i["time"]}\n'
                                                     f'{i["desc"]}'))

                self.ids.editscreen.ids.container.add_widget(isi)

        def default(self, *args):

            self.ids.screen1.spinn.text = '1'  #Make Value To Default

            self.ids.screen1.spinn1.text = '1'  #Make Value To Default

            self.dialog2.dismiss()  #Close The Dialog

        def grammar_check(self):
            import os, certifi
            os.environ['SSL_CERT_FILE'] = certifi.where()
            try:

                toast('Wait Indexing Grammar....')

                from .grammar_check import grammar

                self.ids.screen1.isi.text = grammar(self.ids.screen1.isi.text)

            except:
                pass

        def change_spinn(self):
            try:
                if self.ids.ongkirscreen.ids.search_provinsi.text in list(
                        self.data_tables.keys()):

                    self.ids.ongkirscreen.ids.province.text = self.ids.ongkirscreen.ids.search_provinsi.text
                    from kivymd.uix.snackbar import Snackbar
                    snackbar = Snackbar(text="Provinsi Ditemukan", duration=1)
                    snackbar.show()
                if self.ids.ongkirscreen.ids.search_provinsi.text not in list(
                        self.data_tables.keys()):
                    from kivymd.uix.snackbar import Snackbar
                    snackbar = Snackbar(text="Provinsi Tidak Ditemukan",
                                        duration=1)
                    snackbar.show()
            except:
                pass

        def change_spinn1(self):

            try:
                if self.ids.ongkirscreen.ids.search_provinsi_tujuan.text in list(
                        self.data_tables.keys()):

                    self.ids.ongkirscreen.ids.province_tujuan.text = self.ids.ongkirscreen.ids.search_provinsi_tujuan.text
                    from kivymd.uix.snackbar import Snackbar
                    snackbar = Snackbar(text="Provinsi Ditemukan", duration=1)
                    snackbar.show()
                if self.ids.ongkirscreen.ids.search_provinsi_tujuan.text not in list(
                        self.data_tables.keys()):
                    from kivymd.uix.snackbar import Snackbar
                    snackbar = Snackbar(text="Provinsi Tidak Terjangkau",
                                        duration=1)
                    snackbar.show()
            except:
                pass

        def change_values(self, output):
            self.ids.screen1.isi.text = output

        def check_data_login(self):

            self.get_permission()

            toast('Load Module....')

            try:
                nama = self.ids.screen1.username.text
                self.ids.screen1.username.text = ''
                kelas = self.ids.screen1.kelas.text
                self.ids.screen1.kelas.text = ''
                font = self.ids.screen1.spinn.text
                self.ids.screen1.spinn.text = 'Font'
                kertas = self.ids.screen1.spinn1.text
                self.ids.screen1.spinn1.text = 'Paper'

                isi = self.ids.screen1.isi.text
                self.ids.screen1.isi.text = ''
                with open('data/date.json', 'r') as f:

                    self.attempts = json.load(f)

                    try:
                        pass

                    except KeyError:
                        with open('data/date.json', 'w') as fpp:
                            self.attempts[str(date.today())] = 0

                            json.dump(self.attempts, fpp)

                with open('data/date.json', 'w') as f:

                    try:
                        self.attempts[str(date.today())] += 1

                        json.dump(self.attempts, f)
                    except KeyError:
                        with open('data/date.json', 'w') as fpp:
                            self.attempts[str(date.today())] = 0

                            json.dump(self.attempts, fpp)

                            self.attempts[str(date.today())] += 1

                            json.dump(self.attempts, f)

                prs = nulis.Fung(isi, kertas, font, nama, kelas)

                prs.textNulis()

                self.ids.screen2.image1.source = prs.return_location()
                self.change_screen('screen2')
                print(self.ids.screen_manager.current)
            except:
                self.dialog2 = MDDialog(
                    title='No Input ',
                    text='Fill Out The Font and Paper Section',
                    size_hint=(0.5, 1),
                    buttons=[
                        MDFlatButton(text='Close',
                                     on_release=self.close_dialog2),
                        MDRaisedButton(text='Default', on_release=self.default)
                    ])

                self.dialog2.open()

        def go_piechart(self):
            #Making and Updating Chart
            self.update_dict()
            self.set_label()

            self.ids.piechart.make_piechart()
            self.ids.piechart.update_chart()

        def translation(self):

            try:
                self.get_permission()
                try:
                    from .translation_google import translating
                    toast("Translating...")

                    self.ids.screen1.isi.text = translating(
                        self.ids.screen1.isi.text)
                except:
                    pass
            except:
                pass

        def see_recent_images(self):
            try:
                from kivymd.toast import toast
                toast("Load Image........")
                self.get_permission()
                from .check_recent import check_recent
                self.ids.screen2.image1.source = check_recent()
                self.ids.screen1.go_picture()
            except:
                pass

        def close_dialog2(self, *obj):
            try:
                self.dialog2.dismiss()
            except:
                pass

        def get_permission(self):
            from .permission import check_permission
            check_permission()

        def close_dialog(self, *obj):
            try:
                self.dialog.dismiss()
            except:
                pass

    except:
        pass
コード例 #27
0
class AirControlApp(MDApp):
    def build(self):
        self.root = Builder.load_string(KV)
        return self.root

    def show_aqi(self):
        """It is looking through API for the air quality index coresponding to
        the user input. If the name city is found another function is called to
        show the index, else a snackbar will show a message explaining that the
        city has not been found."""

        try:
            self.city_name = self.root.get_screen("menu").ids.user_input.text
            self.source_aqi = requests.get(
                f'https://api.waqi.info/feed/{self.city_name.lower()}\
                            /?token=f37fe96b9bf9deafacdb2edc057908fd0b0e2e71')
            self.api_aqi = json.loads(self.source_aqi.content)
            self.aqi = self.api_aqi['data']['aqi']
            self.aqi_info_button()
        except Exception:
            self.root.get_screen("menu").ids.info_button.text = ""
            self.root.get_screen(
                "menu").ids.info_button.md_bg_color = 1, 1, 1, 1
            self.root.get_screen(
                "menu").ids.info_button.on_release = self.no_action
            self.snackbar = Snackbar(
                text="There are no results for your search!")
            self.snackbar.show()

    def aqi_info_button(self):
        """It shows the index together with a small description in a button which
        is coloured depending on the air quality."""

        info = f"Air quality index: {self.aqi}\n"

        if self.aqi < 51:
            self.root.get_screen("menu").ids.info_button.text = f"{info} Good"
            self.root.get_screen(
                "menu").ids.info_button.md_bg_color = 0, 193 / 255.0, 0, 1
        elif 50 < self.aqi < 101:
            self.root.get_screen(
                "menu").ids.info_button.text = f"{info}Moderate"
            self.root.get_screen(
                        "menu").ids.info_button.md_bg_color = 244/255.0,\
                                                            238/255.0, 0, 1
        elif 100 < self.aqi < 151:
            self.root.get_screen(
                "menu").ids.info_button.text = f"{info}Unhealthy for\
                                                        Sensitive Groups"
            self.root.get_screen(
                        "menu").ids.info_button.md_bg_color = 245/255.0,\
                                                            130/255.0, 0, 1
        elif 150 < self.aqi < 201:
            self.root.get_screen(
                "menu").ids.info_button.text = f"{info}Unhealthy"
            self.root.get_screen(
                        "menu").ids.info_button.md_bg_color = 230/255.0,\
                                                            50/255.0, 99/255.0, 1
        elif 200 < self.aqi < 301:
            self.root.get_screen(
                "menu").ids.info_button.text = f"{info}Very Unhealthy"
            self.root.get_screen(
                        "menu").ids.info_button.md_bg_color = 135/255/0, 0,\
                                                            170/255.0, 1
        elif self.aqi > 300:
            self.root.get_screen(
                "menu").ids.info_button.text = f"{info}Hazardous"
            self.root.get_screen(
                        "menu").ids.info_button.md_bg_color = 133/255.0,\
                                                            0, 29/255.0, 1
        self.root.get_screen(
            "menu").ids.info_button.on_release = self.show_dialog

    def show_dialog(self):
        """It shows more information in a dialog box about the air quality
        considering its index."""

        self.dialog = MDDialog(text="",
                               type="alert",
                               size_hint=(0.6, 0.5),
                               buttons=[
                                   MDFlatButton(
                                       text="OK",
                                       text_color=self.theme_cls.primary_color,
                                       on_release=self.close_dialog)
                               ])
        if self.aqi < 51:
            self.dialog.text = pollution_levels.good
        elif 50 < self.aqi < 101:
            self.dialog.text = pollution_levels.moderate
        elif 100 < self.aqi < 151:
            self.dialog.text = pollution_levels.unhealthy_sensitive
        elif 150 < self.aqi < 201:
            self.dialog.text = pollution_levels.unhealthy
        elif 200 < self.aqi < 301:
            self.dialog.text = pollution_levels.very_unhealthy
        elif self.aqi > 300:
            self.dialog.text = pollution_levels.hazardous

        self.dialog.open()

    def close_dialog(self, instance):
        """It closes the dialog box containing further information about the air
        quality."""

        self.dialog.dismiss()

    def clear_info(self):
        """ It clears all the information found on the 'menu' screen and the
        button containing the air quality index is disabled."""

        self.root.get_screen("menu").ids.user_input.text = ""
        self.root.get_screen("menu").ids.info_button.text = ""
        self.root.get_screen("menu").ids.info_button.md_bg_color = 1, 1, 1, 1
        self.root.get_screen(
            "menu").ids.info_button.on_release = self.no_action

    def no_action(self):
        """ The function is used to disable the air quality index button."""
        pass

    def show_weather_screen(self):
        """ It searches the weather for the user input through API.
        If the name city is found another function is called to show additional
        information and the screen is changed, else a snackbar will show a
        message explaining the city has not been found."""

        try:
            self.city_name = self.root.get_screen("menu").ids.user_input.text
            self.source_weather = requests.get(
                f'http://api.openweathermap.org/data/2.5/weather?q={self.city_name.lower()}&appid=d55be5a2ffa2717965723f2fd1d5ca7f'
            )
            self.api_weather = json.loads(self.source_weather.content)
            self.weather_info_button()
            self.root.current = "weather"
        except Exception:
            self.snackbar = Snackbar(
                text="There are no results for your search!")
            self.snackbar.show()

    def weather_info_button(self):
        """It shows the information about the weather (city name, icon, temperature,
        small description)"""

        self.root.get_screen("weather").ids.city.text = self.city_name.upper()

        self.icon_name = self.api_weather['weather'][0]['icon']
        self.root.get_screen(
            "weather"
        ).ids.icon_label.icon = f'Icons\{self.icon_name}@2x.png'  #don't forget to write the path for the directory where the Icons file is stored

        self.temp_kelvin = self.api_weather['main']['temp']
        self.temp_celsius = int(self.temp_kelvin - 273.15)
        self.root.get_screen(
            "weather").ids.temp.text = f'{str(self.temp_celsius)} °C'

        self.root.get_screen(
                    "weather").ids.main_description.text =\
                                        self.api_weather['weather'][0]['main']

        self.root.get_screen(
                    "weather").ids.add_description.text =\
                                    self.api_weather['weather'][0]['description']

    def nav_drawer_info(self):
        """ When the plus button from the navigation drawer is pressed
        a dialog box contain additional information will be displayed on the
        screen."""

        info = "Data obtained from openweathermap.org and aqicn.org/api."
        self.dialog_nav_drawer = MDDialog(
            text=info,
            size_hint=(0.6, 0.5),
            buttons=[
                MDFlatButton(text="OK",
                             text_color=self.theme_cls.primary_color,
                             on_release=self.close_dialog_nav_drawer)
            ])
        self.dialog_nav_drawer.open()

    def close_dialog_nav_drawer(self, instance):
        """It closes the dialog box from the navigation drawer containing
        further information."""

        self.dialog_nav_drawer.dismiss()
コード例 #28
0
class RegisterPolicyPage(GridLayout):

    registration_policy = ObjectProperty(None)

    account_type = None
    citizen = None
    campus = None
    code = None

    def __init__(self, **kwargs):
        super().__init__(**kwargs)

        self.snackbar = None

    def start(self, account_type, citizen, campus, code=None):

        self.tsc = SmartCardBehavior(
            self.name,
            card_insert_callback=None,
            card_remove_callback=None,
            card_reinsert_callback=None,
            card_remove_forever_callback=self.card_remove_forever_callback)

        self.account_type = account_type.lower()
        self.citizen = citizen
        self.campus = campus
        self.code = code

        #self.tsc.monitor(4, self.citizen)

        f = open("lib\\Policy.txt", "r", encoding="utf8")
        policy = f.read()
        self.ids.registration_policy.text = policy

        self.ids.account_policy_refuse.size_hint = [.8, None]
        self.ids.account_policy_accept.size_hint = [.8, None]

    def account_creation_not_accept_click_callback(self):
        Logger.info(
            'RegisterPolicyPage: Not accept policy, then return to Home screen'
        )
        CPECafe.tsc.reject()

    def account_creation_accept_click_callback(self):
        Logger.info(
            'RegisterPolicyPage: Register a new Account and then open Set Password screen'
        )

        self.snackbar_show(
            text=
            f'กรุณารอสักครู่ - กำลังสมัครบัญชีสมาชิกใหม่กับระบบจัดการข้อมูลและบริการอินเทอร์เน็ต'
        )

        self.tsc = SmartCardBehavior(self)
        self.citizen = self.tsc.citizen
        # fail = False
        # print(self.citizen)
        #
        #
        # Insert data to database
        #
        #

        self.snackbar_hide()

        if self.citizen:
            Logger.info('RegisterPolicyPage: Open SetPassword screen')
            #self.snackbar_show('We are register your information as RMUTi internet account. Please wait...')

            CPECafe.screen_manager.transition = SlideTransition(
                direction='left')
            CPECafe.screen_manager.current = 'Finish'
            #CPECafe.tsc.smart_card_removable = False
            CPECafe.finish_page.start()
            #self.tsc.unmonitor()
            return

        CPECafe.tsc.dialog(
            title='เกิดข้อผิดพลาด...',
            size=('380dp', '180dp'),
            size_hint=(None, None),
            #text='The RMUTI Internet Accounting Service is down',
            text='ขออภัย.. เราไม่สามารถให้บริการได้',
            text_button_ok='OK')
        return

    def card_remove_forever_callback(self):
        if self.account_type != None:
            self.account_type_select.add_widget(self.ids.account_type_text)
        self.account_type = None

    def snackbar_show(self, text, duration=8):
        if self.snackbar:
            self.snackbar = None
        self.snackbar = Snackbar(text=text, duration=duration)
        self.snackbar.show()
        #Clock.schedule_once(self.snackbar_hide, wait)

    def snackbar_hide(self, instance=None):
        if self.snackbar:
            self.snackbar.hide()
            self.snackbar = None
コード例 #29
0
class User(ScreenManager):
    color = StringProperty()
    accent_palette = StringProperty()
    radius = NumericProperty()
    refresh_home = None
    username = config_dict["username"]

    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.username = config_dict["username"]
        self.snackbar = Snackbar(duration=1.5)  # 提示窗
        self.dialog = MDDialog(
            size_hint_x=0.8,
            text="确定清除全部由学习记录?",
            buttons=[
                MDFlatButton(
                    text="取消",
                    text_color=config.theme_cls.primary_color,
                    on_release=lambda x: (self.dialog.dismiss()),
                ),
                MDFlatButton(
                    text="确定",
                    text_color=config.theme_cls.primary_color,
                    on_release=lambda x: (
                        self.ClearStudyProcess(),
                        self.dialog.dismiss(),
                    ),
                ),
            ],
        )
        self.dialog.set_normal_height()
        self.studynum = StudyNum(max=999,
                                 min=5,
                                 step=5,
                                 now=config_dict["max_learn"])
        self.study_num_dialog = MDDialog(
            size_hint_x=0.9,
            title="每日学习数量",
            type="custom",
            content_cls=self.studynum,
            buttons=[
                MDFlatButton(
                    text="取消",
                    text_color=config.theme_cls.primary_color,
                    on_release=lambda x: (self.study_num_dialog.dismiss()),
                ),
                MDFlatButton(
                    text="确定",
                    text_color=config.theme_cls.primary_color,
                    on_release=lambda x: (self.ChangeStudyNum(), ),
                ),
            ],
        )
        self.study_num_dialog.set_normal_height()

        self.difficulty = StudyNum(step=1,
                                   max=6,
                                   min=1,
                                   now=config_dict["difficulty"])
        self.difficulty_dialog = MDDialog(
            size_hint_x=0.9,
            title="挑战难度",
            type="custom",
            content_cls=self.difficulty,
            buttons=[
                MDFlatButton(
                    text="取消",
                    text_color=config.theme_cls.primary_color,
                    on_release=lambda x: (self.difficulty_dialog.dismiss()),
                ),
                MDFlatButton(
                    text="确定",
                    text_color=config.theme_cls.primary_color,
                    on_release=lambda x: (self.ChangeDifficulty(), ),
                ),
            ],
        )
        self.difficulty_dialog.set_normal_height()
        """ self.theme_dialog = MDThemePicker()
        self.theme_dialog.ids.title.text = "主题颜色搭配"
        self.theme_dialog.ids.theme_tab.text = "主题色"
        self.theme_dialog.ids.accent_tab.text = "选中色"
        self.theme_dialog.ids.close_button.text = "保存"
        self.theme_dialog.ids.close_button.on_release = lambda :(self.theme_dialog.dismiss(), self.SaveThemeColor()) """
        """ # 移除色调选择
        self.theme_dialog.ids.tab_panel.tab_bar.layout.remove_widget(
            self.theme_dialog.ids.style_tab.tab_label
        )
        self.theme_dialog.ids.tab_panel.carousel.remove_widget(
            self.theme_dialog.ids.style_tab
        ) """

    def ChangeDifficulty(self):
        num = self.difficulty.num
        print("ChangeDifficulty", num)
        config_dict["difficulty"] = int(num)
        config.SaveConfig()
        self.difficulty_dialog.dismiss()
        self.snackbar.text = "修改挑战难度成功"
        self.snackbar.show()

    def ChangeStudyNum(self):
        text = self.studynum.num
        print("ChangeStudyNum", text)
        if text > 0:
            config_dict["max_learn"] = int(text)
            config.SaveConfig()
            self.refresh_home()
            self.study_num_dialog.dismiss()
            self.snackbar.text = "修改每日学习数量成功"
            self.snackbar.show()
        else:
            self.studynum.ids.input.hint_text = "每日学习个数必须大于0!"
            self.studynum.ids.input.text = ""
            self.studynum.ids.input.error = True

    """ def ChangeThemeColor(self):
        self.theme_dialog.open() """

    def SaveThemeColor(self):  #保存主题颜色设置
        config_dict["theme_cls_primary_palette"] = self.color
        config_dict["theme_cls_accent_palette"] = self.accent_palette
        config.SaveConfig()

    def ClearStudyProcess(self):
        def __clear():
            appdata.IsInit(True)
            config.record.clear()
            config.SaveRecord()
            self.snackbar.text = "清除成功"
            self.snackbar.show()

        threading.Thread(target=__clear).start()
コード例 #30
0
class CPECafeApp(MDApp):

    title = 'CPE Cafe WiFi'
    #title = 'ระบบบริการบัญชีสมาชิกอินเทอร์เน็ต มทร.อีสาน'

    font_thin = APP_FOLDER_NAME + '\\lib\\resources\\SukhumvitSet-Text.ttf'
    font_regular = APP_FOLDER_NAME + '\\lib\\resources\\SukhumvitSet-Medium.ttf'
    font_bold = APP_FOLDER_NAME + '\\lib\\resources\\SukhumvitSet-SemiBold.ttf'
    font_name = 'SukhumvitSet'

    smart_card = None

    citizen = None
    account = None
    menu = None

    def __init__(self, **kwargs):

        LabelBase.register(name='SukhumvitSet',
                           fn_regular=APP_FOLDER_NAME +
                           '\\lib\\resources\\SukhumvitSet-Medium.ttf',
                           fn_italic=APP_FOLDER_NAME +
                           '\\lib\\resources\\SukhumvitSet-Medium.ttf',
                           fn_bold=APP_FOLDER_NAME +
                           '\\lib\\resources\\SukhumvitSet-Bold.ttf',
                           fn_bolditalic=APP_FOLDER_NAME +
                           '\\lib\\resources\\SukhumvitSet-Bold.ttf')
        theme_font_styles.append('SukhumvitSet')
        self.theme_cls.font_styles['SukhumvitSet'] = [
            'SukhumvitSet',
            16,
            False,
            0.15,
        ]

        self.theme_cls.primary_palette = 'Blue'

        super().__init__(**kwargs)
        #self.dialog_change_theme = None
        #self.toolbar = None
        self.snackbar = None

    def build(self):
        self.screen_manager = ScreenManager(transition=NoTransition())

        self.tsc = SmartCardBehavior(
            'Home',
            reader_added_callback=self.smart_card_reader_added_callback,
            reader_removed_callback=self.smart_card_reader_removed_callback,
            card_insert_callback=self.smart_card_inserted_callback,
            #card_remove_callback=self.smart_card_remove_callback,
            card_reinsert_callback=None,
            card_remove_forever_callback=None)

        with open(f'lib\\Loading.kv', encoding='utf8') as f:
            Builder.load_string(f.read())
        self.loading_page = LoadingPage()
        screen = Screen(name='Loading')
        screen.on_enter = self.loading_page.load_pages
        screen.add_widget(self.loading_page)
        self.screen_manager.add_widget(screen)

        return self.screen_manager

    def smart_card_reader_added_callback(self, added_readers):
        #CPECafe.home_page.smartcard_text.text = f'Citizen Card was inserted'
        #CPECafe.home_page.smartcard_text.text = f'มีการต่ออุปกรณ์อ่านบัตรประจำตัวประชาชน'
        Logger.info('CPECafeApp: SmartCard reader added')

    def smart_card_reader_removed_callback(self, removed_readers):
        #CPECafe.home_page.smartcard_text.text = f'Citizen Card was inserted'
        #CPECafe.home_page.smartcard_text.text = f'มีการถอดอุปกรณ์อ่านบัตรประจำตัวประชาชน'
        Logger.info('CPECafeApp: SmartCard reader removed')

    def smart_card_inserted_callback(self, **kwargs):
        Logger.info('CPECafeApp: SmartCard inserted')
        #CPECafe.home_page.smartcard_text.text = f'Citizen Card was inserted'
        CPECafe.home_page.smartcard_text.text = f'มีการเสียบบัตรประจำตัวประชาชน'
        #CPECafe.home_page.smartcard_image.source = f'lib\\resources\\card_in_use_512px.png'

        # Read Citizen ID
        if self.tsc.citizen != None:

            self.citizen = self.tsc.citizen

            #self.citizen = '0409000609020'

            self.account = None
            Logger.info('CPECafeApp: Open Register screen')
            CPECafe.screen_manager.transition = SlideTransition(
                direction='left')
            CPECafe.screen_manager.current = 'RegisterPolicy'
            self.tsc.smart_card_removable = True
            CPECafe.register_policy_page.start()

            return

    def smart_card_remove_callback(self, **kwargs):
        Logger.info('CPECafeApp: SmartCard removed')

    def snackbar_show(self, text, duration=8):
        if self.snackbar:
            self.snackbar = None
        self.snackbar = Snackbar(text=text, duration=duration)
        self.snackbar.show()

    def snackbar_hide(self, instance=None):
        if self.snackbar:
            self.snackbar.hide()
            self.snackbar = None

    def callback_earthe(self):
        print('callback_earthe')
        menu = 1
        return menu

    def callback_wifi(self):
        hostname = "www.google.com"
        response = os.system("ping " + hostname)
        # and then check the response...
        if response == 0:
            pingstatus = "Network Active"
        else:
            pingstatus = "Network Error"

        return pingstatus

    # def check_ping():
    #     hostname = "taylor"
    #     response = os.system("ping -c 1 " + hostname)
    #     # and then check the response...
    #     if response == 0:
    #         pingstatus = "Network Active"
    #     else:
    #         pingstatus = "Network Error"

    #     return pingstatus

    def callback_key(self):
        print('callback_key')
        menu = 3
        return menu

    def callback_setting(self):
        print('callback_setting')
        menu = 4
        CPECafe.screen_manager.transition = SlideTransition(direction='left')
        CPECafe.screen_manager.current = 'Setting'
        return menu

    def callback_login(self, menu):
        pass

    # setting screen menu

    def callback_home(self):
        CPECafe.screen_manager.current = 'Home'
        CPECafe.screen_manager.transition = SlideTransition(direction='right')

    def callback_save(self):
        # save to database
        print('callback_save')