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
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()
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
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()
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]])]]
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')
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()