예제 #1
0
def make_layout():
    layout = [
        [sg.Menu(make_menu(), key="-menu-")],
        [sg.Stretch(), sg.Text("Star Wars Dice Roller", font=FONT_HEADING), sg.Stretch()],
        [sg.HorizontalSeparator()]
    ]
    active = 0
    col_layout = [[],[]]
    for stat,val in character["stats"].items():
        col_layout[active].extend(make_stat_section(stat,val))
        if active == 0:
            active = 1
        else:
            active = 0
    layout.append([
        sg.Column(layout=col_layout[0]),
        sg.Column(layout=col_layout[1]),
        sg.Column(layout=[
            [sg.HorizontalSeparator(),],
            [
                sg.Stretch(),
                sg.Text(text="Action Modifiers", font=FONT_HEADING),
                sg.Stretch(),
            ],
            [
                sg.Text(text="Advantages",font=FONT_STAT),
                sg.Stretch(),
                sg.Slider(range=(0,5), default_value=0,orientation="h",size=(45, 10),key="adv",background_color="skyblue",enable_events=True),
                sg.Text(text="+",font=FONT_LOG),
                sg.Text(text="0", key="curr_adv",font=FONT_LOG),
                sg.Text(text="d",font=FONT_LOG),
            ],
            [
                sg.Text(text="Penalties",font=FONT_STAT),
                sg.Stretch(),
                sg.Slider(range=(0,5), default_value=0,orientation="h",size=(45, 10),key="pen",background_color="pink",enable_events=True),
                sg.Text(text="-",font=FONT_LOG),
                sg.Text(text="0", key="curr_pen",font=FONT_LOG),
                sg.Text(text="d",font=FONT_LOG),
            ],
            [sg.HorizontalSeparator(),],
            [sg.Text(text="Result", font=FONT_HEADING),sg.Stretch()],
            [sg.Text(text="Roll something!",key="-result-",font=FONT_RESULT,size_px=(650,100) , relief=sg.RELIEF_RIDGE)],
            [sg.HorizontalSeparator()],
            [sg.Text(text="Results Log", font=FONT_HEADING),sg.Stretch()],
            [sg.Text(text="",key="-resultlog-",font=FONT_LOG,relief=sg.RELIEF_SUNKEN)],
        ],size=(90,90)),
        sg.Column(layout=make_weapon_section(character["weapons"]))
    ])
    return layout
예제 #2
0
def janelareceita(
    NOME, RECEITA_IMAGEM, RECEITA_INGREDIENTES, RECEITA_CATEGORIAS, RECEITA_MODOPREPARO
):
    window.Disable()
    LAYOUT2 = [
        [sg.Stretch(), sg.Text(NOME, font=("SegoeUI bold", 24)), sg.Stretch()],
        [sg.HorizontalSeparator()],
        [
            sg.Column(
                [
                    [sg.Stretch(), sg.Image(data=RECEITA_IMAGEM), sg.Stretch()],
                    [sg.Text("Ingredientes:")],
                    [sg.Listbox(RECEITA_INGREDIENTES)],
                    [sg.Text("Categorias:")],
                    [sg.Listbox(RECEITA_CATEGORIAS)],
                ]
            ),
            sg.VerticalSeparator(),
            sg.Column(
                [[sg.Text("MODO DE PREPARO:")], [sg.Multiline(RECEITA_MODOPREPARO)]]
            ),
        ],
    ]
    window2 = sg.Window(
        "Livro de Receitas",
        layout=LAYOUT2,
        size=(1200, 600),
        keep_on_top=True,
    )
    while 1:
        event2, values2 = window2.read()
        if event2 == sg.WINDOW_CLOSED:
            break
        window2.close()
    window.Enable()
예제 #3
0
def make_edit_layout():
    layout = [
        [sg.Menu(make_menu(), key="-menu-")],
        [sg.Stretch(), sg.Text("Star Wars Dice Roller", font=FONT_HEADING), sg.Stretch()],
        [sg.HorizontalSeparator()]
    ]
    active = 0
    col_layout = [[],[]]
    for stat,val in character["stats"].items():
        col_layout[active].extend(make_edit_stat_section(stat,val))
        if active == 0:
            active = 1
        else:
            active = 0
    layout.append([
        sg.Column(layout=col_layout[0]),
        sg.Column(layout=col_layout[1]),
        sg.Column(layout=make_edit_weapons_section(character["weapons"]))
    ])
    return layout
예제 #4
0
def rename_dialog(src: str):
    import PySimpleGUIQt as G
    ske = PySimpleGUISpecialKeyEvent()
    conf_file = real_join_path('~', '.config/rename_dialog.json')
    root = 'root'
    fname = 'fname'
    ext = 'ext'
    key_new_root = 'key_new_root'
    key_new_base = 'key_new_base'
    ok = 'OK'
    cancel = 'Cancel'
    pattern = 'pattern'
    replace = 'replace'
    substitute = 'substitute'
    save_replace = 'save_replace'
    save_pattern = 'save_pattern'
    add_root = 'add_root'
    rename_info_file = 'rename_info_file'
    bytes_count = 'bytes_count'
    title = 'Rename - {}'.format(src)
    h = None

    conf = read_json_file(conf_file, default={pattern: [''], replace: ['']})
    tmp_pl = conf[pattern] or ['']
    tmp_rl = conf[replace] or ['']
    old_root, old_base = os.path.split(src)
    old_fn, old_ext = os.path.splitext(old_base)
    info_file_base = [
        f for f in os.listdir(old_root) if f.endswith('.info') and (
            f.startswith(old_fn) or old_fn.startswith(f.rstrip('.info')))
    ]
    has_info = True if info_file_base else False

    @deco_factory_retry(Exception, 0, enable_default=True, default=None)
    def re_sub():
        return re.sub(data[pattern], data[replace], data[fname] + data[ext])

    def count_name_bytes(name: str):
        d = {}
        try:
            c, b = encode_default_locale(name)
            d[c] = len(b)
        except UnicodeEncodeError:
            pass
        u8 = 'utf-8'
        if u8 not in d:
            try:
                c, b = encode_default_locale(name, u8)
                d[c] = len(b)
            except UnicodeEncodeError:
                pass
        return f'Basename Length: {len(name)}, {", ".join([f"{k.upper()} {v} bytes" for k, v in d.items()])}'

    # sg.theme('SystemDefaultForReal')
    layout = [[G.T(src, key='src')], [G.HorizontalSeparator()],
              [
                  G.I(old_fn, key=fname, focus=True),
                  G.I(old_ext, key=ext, size=(42, h))
              ],
              [
                  G.I(old_root, key=root),
                  G.B('+', key=add_root, size=(20, h)),
                  G.FolderBrowse('...',
                                 target=root,
                                 initial_folder=old_root,
                                 size=(20, h))
              ], [G.HorizontalSeparator()],
              [G.T('Regular Expression Pattern & Replacement')],
              [
                  G.T(size=(0, h)),
                  G.Drop(tmp_pl,
                         key=pattern,
                         enable_events=True,
                         text_color='blue'),
                  G.CB('',
                       default=True,
                       key=save_pattern,
                       enable_events=True,
                       size=(15, h)),
                  G.Drop(tmp_rl,
                         key=replace,
                         enable_events=True,
                         text_color='blue'),
                  G.CB('',
                       default=True,
                       key=save_replace,
                       enable_events=True,
                       size=(15, h)),
                  G.B('Go', key=substitute, size=(25, h))
              ], [G.HorizontalSeparator()], [G.I(old_root, key=key_new_root)],
              [G.I(old_base, key=key_new_base)],
              [
                  G.Submit(ok, size=(10, 1)),
                  G.Stretch(),
                  G.T(count_name_bytes(old_base), key=bytes_count),
                  G.Stretch(),
                  G.Cancel(cancel, size=(10, 1))
              ]]
    if has_info:
        info_file_base = info_file_base[0]
        info_filepath = os.path.join(old_root, info_file_base)
        with open(info_filepath, encoding='utf8') as f:
            info = f.read()
        layout.insert(2, [
            G.CB(info_file_base,
                 default=True,
                 key=rename_info_file,
                 enable_events=True)
        ])
        layout.insert(2, [G.ML(info, key='ML')])
        layout.insert(4, [G.HorizontalSeparator()])

    ensure_sigint_signal()
    window = G.Window(title,
                      layout,
                      return_keyboard_events=True,
                      finalize=True,
                      font='arial 10',
                      element_padding=(1, 1))
    window.bring_to_front()
    ml = window.find_element('ML', silent_on_error=True)
    if ml:
        ml.update(readonly=True)

    loop = True
    data = {
        fname: old_fn,
        ext: old_ext,
        pattern: tmp_pl[0],
        replace: tmp_rl[0],
        root: old_root,
        key_new_root: '',
        key_new_base: ''
    }

    while loop:
        dst_from_data = os.path.join(data[key_new_root], data[key_new_base])
        try:
            tmp_fname = re_sub() or data[fname] + data[ext]
            dst = os.path.realpath(os.path.join(data[root], tmp_fname))
        except TypeError:
            dst = src
        if dst != dst_from_data:
            nr, nb = os.path.split(dst)
            window[key_new_root].update(nr)
            window[key_new_base].update(nb)
            window[bytes_count].update(count_name_bytes(nb))

        event, data = window.read()
        for k in (root, fname, ext, key_new_root, key_new_base):
            window[k].update(text_color=None)
        cur_p = data[pattern]
        cur_r = data[replace]

        if event == ske.esc:
            loop = False
        elif event == add_root:
            os.makedirs(data[root], exist_ok=True)
        elif event == substitute:
            data[fname], data[ext] = os.path.splitext(
                re_sub() or data[fname] + data[ext])
            window[fname].update(data[fname])
            window[ext].update(data[ext])
        elif event == save_pattern:
            if data[save_pattern]:
                conf[pattern].insert(0, cur_p)
                conf[pattern] = dedup_list(conf[pattern])
            else:
                conf[pattern] = remove_from_list(conf[pattern], [cur_p])
        elif event == save_replace:
            if data[save_replace]:
                conf[replace].insert(0, cur_r)
                conf[replace] = dedup_list(conf[replace])
            else:
                conf[replace] = remove_from_list(conf[replace], [cur_r])
        elif event == pattern:
            window[save_pattern].update(value=cur_p in conf[pattern])
        elif event == replace:
            window[save_replace].update(value=cur_r in conf[replace])
        elif event == ok:
            try:
                shutil.move(src, dst)
                if has_info:
                    if data[rename_info_file]:
                        shutil.move(info_filepath,
                                    os.path.splitext(dst)[0] + '.info')
                loop = False
            except FileNotFoundError:
                for k in (root, fname, ext):
                    window[k].update(text_color='red')
            except FileExistsError:
                for k in (key_new_root, key_new_base):
                    window[k].update(text_color='red')
            except OSError as e:
                G.PopupError(str(e))
        elif event in (None, cancel):
            loop = False
        else:
            ...
    else:
        write_json_file(conf_file, conf, indent=0)

    window.close()
예제 #5
0
    def __init__(self):
        self.WINDOW_TITLE = "MobilePayAlerts"

        self.event_combiner = {"_BTN_GENQR_": qr.generate}

        tab_1 = sg.Tab(text["tab_1"]["text"], [[
            sg.HorizontalSeparator()
        ], [
            sg.Button("Start", key="_BTN_START_", size=(250, 40), visible=True)
        ], [
            sg.HorizontalSeparator()
        ], [
            sg.Button("Stop", key="_BTN_STOP_", size=(250, 40), visible=False)
        ], [
            sg.HorizontalSeparator()
        ], [sg.Button("Test", key="_BTN_TEST_", size=(250, 40), visible=True)],
                                               [sg.HorizontalSeparator()]])

        tab_2 = sg.Tab(text["tab_2"]["text"], [
            [
                sg.Text(text["label_settings"]["text"],
                        font=("def", "def", "bold"))
            ],
            [
                sg.Text(text["label_name"]["text"], size=(11, 0.6)),
                sg.InputText(default_text=cfg["default_name"],
                             key=text["input_name"]["key"],
                             do_not_clear=True,
                             tooltip=text["input_name"]["tt"])
            ],
            [
                sg.Text(text["label_msg"]["text"], size=(11, 0.6)),
                sg.InputText(default_text=cfg["default_msg"],
                             key=text["input_msg"]["key"],
                             do_not_clear=True,
                             tooltip=text["input_msg"]["tt"])
            ],
            [
                sg.Text(text["label_lang"]["text"], size=(11, 0.6)),
                sg.InputCombo(text["languages"],
                              key=text["combobox"]["key"],
                              default_value=cfg["language"].capitalize())
            ],
            [
                sg.Button(text["btn_save"]["text"],
                          key=text["btn_save"]["key"],
                          tooltip=text["btn_save"]["tt"])
            ],
            [sg.HorizontalSeparator()],
            [
                sg.Button(text["btn_generate"]["text"],
                          key=text["btn_generate"]["key"],
                          tooltip=text["btn_generate"]["tt"])
            ],
            [sg.HorizontalSeparator()],
            [
                sg.Text(text["label_other_settings"]["text"],
                        font=("def", "def", "bold"))
            ],
            [
                sg.Button(text["btn_reset"]["text"],
                          key=text["btn_reset"]["key"]),
                sg.Button(text["btn_setup"]["text"],
                          key=text["btn_setup"]["text"])
            ],
        ])

        self.layout = [[sg.TabGroup([[tab_1, tab_2]])]]
예제 #6
0
파일: screens.py 프로젝트: kid1carus/Sushi
def mainScreen():
    if os.path.exists(CONF_PATH) == True:
        config = ConfigParser()
        config.read(CONF_PATH)
        model = config['DEVICE']['model']
        ecid = config['DEVICE']['ecid']
        boardconfig = config['DEVICE']['boardconfig']
        config_loaded = True
    else:
        model = 'None - Enter Device Identifier'
        ecid = 'None - Enter ECID'
        config_loaded = False
        boardconfig = 'None - Enter Boardconfig'
    version = '1.0.1~beta'
    col1 = [[p.T('Enter Device Identifier:', justification='center')],
            [p.Input(model, do_not_clear=True, key='_ID_')]]
    col2 = [[p.T('Enter Board Config:', justification='center')],
            [p.Input(boardconfig, do_not_clear=True, key='_BOARDCONF_')]]
    logo = [[
        p.Image(data_base64=Images.logo, click_submits=True, key='_LOGO_')
    ]]
    title = [[
        p.T('Sushi | GUI Wrapper for TSSChecker',
            font=('Corbel', 15),
            text_color='#ffffff',
            justification='left')
    ], [p.T('Sushi Version: ' + version, font=('Corbel', 10))],
             [
                 p.T('Developed by @maxbridgland',
                     click_submits=True,
                     key='_TWITTER_')
             ], [p.T('Licensed Under GNU GPLv3 | Made with Python')]]
    layout = [[p.Column(logo), p.Column(title)], [p.HorizontalSeparator()],
              [p.T('Enter ECID:', justification='center')],
              [p.Input(ecid, do_not_clear=True, key='_ECID_', focus=True)],
              [p.Column(col1),
               p.VerticalSeparator(),
               p.Column(col2)],
              [
                  p.T('iOS Version To Save:', justification='center'),
                  p.Input('12.1.1',
                          size=(10, 1),
                          justification='center',
                          key='_VER_'),
                  p.Check('Save Latest Firmware', key='_LATEST_')
              ], [p.HorizontalSeparator()],
              [
                  p.Image(data_base64=Images.close_b,
                          click_submits=True,
                          key='Close'),
                  p.Image(data_base64=Images.status_b,
                          click_submits=True,
                          key='Status'),
                  p.Image(data_base64=Images.help_b,
                          click_submits=True,
                          key='Help'),
                  p.Image(data_base64=Images.start_b,
                          click_submits=True,
                          key='Start')
              ]]
    window = p.Window('Sushi',
                      no_titlebar=True,
                      keep_on_top=True,
                      grab_anywhere=True).Layout(layout)
    while True:
        event, values = window.Read()
        if event == 'Close':
            exit()
            break
        elif event == 'Help':
            helpMenu()
        elif event == 'Status':
            statusMenu()
        elif event == 'Start':
            devId = values['_ID_']
            boardconfig = values['_BOARDCONF_']
            ecid = values['_ECID_']
            if values['_LATEST_'] == True:
                latest = '-l'
                version = ''
            elif values['_LATEST_'] == False:
                latest = ''
                version = values['_VER_']
            finishedPopup(devId, ecid, boardconfig, version, latest)
            if os.path.exists(CONF_PATH) == False:
                configMenu(ecid, devId, boardconfig)
        elif event == '_LOGO_':
            webbrowser.open_new_tab('https://github.com/M4cs/Sushi')
        elif event == '_TWITTER_':
            webbrowser.open_new_tab('https://twitter.com/maxbridgland')
예제 #7
0
def rename_dialog(src: str):
    import PySimpleGUIQt as sg
    ske = PySimpleGUISpecialKeyEvent()
    conf_file = real_join_path('~', '.config/rename_dialog.json')
    root = 'root'
    fname = 'fname'
    ext = 'ext'
    new_root = 'new_root'
    new_base = 'new_base'
    ok = 'OK'
    cancel = 'Cancel'
    pattern = 'pattern'
    replace = 'replace'
    substitute = 'substitute'
    save_replace = 'save_replace'
    save_pattern = 'save_pattern'
    add_root = 'add_root'
    title = 'Rename - {}'.format(src)
    h = .7

    conf = read_json_file(conf_file, default={pattern: [''], replace: ['']})
    tmp_pl = conf[pattern] or ['']
    tmp_rl = conf[replace] or ['']
    old_root, old_base = os.path.split(src)
    old_fn, old_ext = os.path.splitext(old_base)

    # sg.theme('SystemDefaultForReal')
    layout = [
        [sg.T(src, key='src')],
        [sg.HorizontalSeparator()],
        [sg.I(old_root, key=root),
         sg.B('+', key=add_root, size=(3, h)),
         sg.FolderBrowse('...', target=root, initial_folder=old_root, size=(6, h))],
        [sg.I(old_fn, key=fname, focus=True),
         sg.I(old_ext, key=ext, size=(6, h))],
        [sg.HorizontalSeparator()],
        [sg.T('Regular Expression Substitution Pattern & Replacement')],
        [sg.T(size=(0, h)),
         sg.Drop(tmp_pl, key=pattern, enable_events=True, text_color='blue'),
         sg.CB('', default=True, key=save_pattern, enable_events=True, size=(2, h)),
         sg.Drop(tmp_rl, key=replace, enable_events=True, text_color='blue'),
         sg.CB('', default=True, key=save_replace, enable_events=True, size=(2, h)),
         sg.B('Go', key=substitute, size=(3, h))],
        [sg.HorizontalSeparator()],
        [sg.I(old_root, key=new_root)],
        [sg.I(old_fn + old_ext, key=new_base)],
        [sg.Submit(ok, size=(10, 1)),
         sg.Stretch(),
         sg.Cancel(cancel, size=(10, 1))]]

    ensure_sigint_signal()
    window = sg.Window(title, return_keyboard_events=True).layout(layout).finalize()
    window.bring_to_front()

    loop = True
    data = {fname: old_fn, ext: old_ext, pattern: tmp_pl[0], replace: tmp_rl[0], root: old_root,
            new_root: '', new_base: ''}

    @decorator_factory_exception_retry(Exception, 0, enable_default=True, default=None)
    def re_sub():
        return re.sub(data[pattern], data[replace], data[fname] + data[ext])

    while loop:
        dst_from_data = os.path.join(data[new_root], data[new_base])
        try:
            tmp_fname = re_sub() or data[fname] + data[ext]
            dst = os.path.realpath(os.path.join(data[root], tmp_fname))
        except TypeError:
            dst = src
        if dst != dst_from_data:
            nr, nb = os.path.split(dst)
            window[new_root].update(nr)
            window[new_base].update(nb)

        event, data = window.read()
        f = window.find_element_with_focus()
        for k in (root, fname, ext, new_root, new_base):
            window[k].update(text_color=None)
        cur_p = data[pattern]
        cur_r = data[replace]

        if event == ske.esc:
            loop = False
        elif event == add_root:
            os.makedirs(data[root], exist_ok=True)
        elif event == substitute:
            data[fname], data[ext] = os.path.splitext(re_sub() or data[fname] + data[ext])
            window[fname].update(data[fname])
            window[ext].update(data[ext])
        elif event == save_pattern:
            if data[save_pattern]:
                conf[pattern].insert(0, cur_p)
                conf[pattern] = dedup_list(conf[pattern])
            else:
                conf[pattern] = remove_from_list(conf[pattern], [cur_p])
        elif event == save_replace:
            if data[save_replace]:
                conf[replace].insert(0, cur_r)
                conf[replace] = dedup_list(conf[replace])
            else:
                conf[replace] = remove_from_list(conf[replace], [cur_r])
        elif event == pattern:
            window[save_pattern].update(value=cur_p in conf[pattern])
        elif event == replace:
            window[save_replace].update(value=cur_r in conf[replace])
        elif event == ok:
            try:
                shutil.move(src, dst)
                loop = False
            except FileNotFoundError:
                for k in (root, fname, ext):
                    window[k].update(text_color='red')
            except FileExistsError:
                for k in (new_root, new_base):
                    window[k].update(text_color='red')
            except OSError as e:
                sg.PopupError(str(e))
        elif event in (None, cancel):
            loop = False
        else:
            ...
    else:
        write_json_file(conf_file, conf, indent=0)

    window.close()