def create_note(name, config): g.SetOptions(background_color=config.background_color, text_color=config.text_color, input_elements_background_color=config.background_color, input_text_color=config.text_color, button_color=(config.text_color, config.background_color), border_width=config.border_width, font=('Arial', int(config.font_size))) layout = [ [g.T('Create Note', font=('Arial', int(config.title_size)), justification='center')], [g.Multiline('', size=(50, 5), key='content')], [g.B('Close'), g.B('Save')] ] window = g.Window('Create', no_titlebar=NTB, keep_on_top=True, grab_anywhere=True, layout=layout, alpha_channel=float(config.alpha)) while True: event, value = window.Read() if event == 'Close': window.Close() break elif event == 'Save': with open(NOTES_PATH, 'r+') as notes: note_obj = json.load(notes) note_obj.update({ name: value['content'] }) notes.seek(0) notes.truncate() json.dump(note_obj, notes, indent=4) window.Close() break
def first_menu(self): layout = [ [g.T('Charlatano GUI Settings v1.1', font=('Arial', 15))], [g.T('Made by Max Bridgland', font=('Arial', 10))] ] count = 0 col1 = [] col2 = [] for k, v in self.parser.current_settings.items(): title = str(k[0].upper() + k[1:].lower().replace('_', ' ')) if (count % 2) == 0: col1.append([ g.B(' ' + title + ' ', key=k) ]) count += 1 else: col2.append([ g.B(' ' + title + ' ', key=k) ]) count += 1 layout.append([ g.Column(col1), g.Column(col2) ]) layout.append([ g.Button('Close'), g.Button('Restart Charlatano', key='__RESTART__'), g.Button('Start Charlatano', key='__START__') ]) window = g.Window('Charlatano GUI Settings', no_titlebar=True, grab_anywhere=True, keep_on_top=True, layout=layout) charla = Runner() while True: event, values = window.Read() print(event) if event == 'Close': window.Close() exit() elif event == '__START__': if charla.running and charla.proc: charla.killCharlatano() window.FindElement('__START__').Update('Start Charlatano') else: charla.runCharlatano() window.FindElement('__START__').Update('Stop Charlatano') elif event == '__RESTART__': charla.restartCharlatano() if charla.running: window.FindElement('__START__').Update('Stop Charlatano') else: window.Close() self.settings_gui(event)
def settings_gui(self, setting): layout = [ [g.T(setting[0].upper() + setting[1:], font=('Arial', 15))] ] count = 0 col1 = [] col2 = [] col3 = [] col4 = [] for k, v in self.parser.current_settings[setting].items(): if count == 0: col1.append([ g.T(str(k[0].upper() + k[1:].lower().replace('_', ' '))), g.Input(str(v.replace('\n', '')), key=k) ]) count += 1 elif count == 1: col2.append([ g.T(str(k[0].upper() + k[1:].lower().replace('_', ' '))), g.Input(str(v.replace('\n', '')), key=k) ]) count += 1 elif count == 2: col3.append([ g.T(str(k[0].upper() + k[1:].lower().replace('_', ' '))), g.Input(str(v.replace('\n', '')), key=k) ]) count = 0 layout.append([ g.Column(col1), g.Column(col2), g.Column(col3) ]) layout.append([ g.Button('Back'), g.B('Save') ]) window = g.Window(setting[0].upper() + setting[1:], no_titlebar=True, grab_anywhere=True, keep_on_top=True, layout=layout) while True: event, values = window.Read() if event == 'Back': window.Close() self.first_menu() if event == 'Save': self.parser.update_settings(setting, values) # runCharlatano()
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()
sg.T(' PASSWORD:'******'text_pass'), sg.I(key='pass', size=(10, 0.9), disabled=True), sg.T(""), sg.T(""), sg.T(""), sg.T(""), sg.T("") ], [ sg.T(" FOLDER: "), sg.I(key="pasta", size=(46, 0.9)), sg.FolderBrowse("BROWSE", size=(10, 0.95)) ], [ sg.T(size=(20, 1)), sg.B("RUN", size=(8, 0.9)), sg.B("STOP", disabled=True, size=(8, 0.9)), sg.B("EXIT", size=(8, 0.9)) ], [sg.Output(background_color="Black", text_color="White")]] window = sg.Window('File Sharing System', resizable=False, size=(600, 300)).layout(Layout) def terminate_thread(thread): if not thread.is_alive(): return exc = ctypes.py_object(SystemExit) res = ctypes.pythonapi.PyThreadState_SetAsyncExc( ctypes.c_long(thread.ident), exc)
from pprint import pprint import requests import lxml import PySimpleGUIQt as sg sg.theme('Reddit') headings = [ 'Nome', 'Seeders', 'Leechers', 'Data', 'Tamanho', 'Usuário', 'Download' ] l = ['', '', '', '', '', '', ''] Values = [l for a in range(20)] Layout = [[ sg.T("Procurar:"), sg.I(key='keywords'), sg.B("PROCURAR", key='PROCURAR', size=(10, 1)) ], [sg.Listbox(l, enable_events=True, key='tabela')]] # [sg.Table(Values, headings=headings, key='tabela', auto_size_columns=True, enable_events=True)]] Window = sg.Window("1337x.to Searcher", layout=Layout, size=(1200, 695), font="SEGOEUI 11") while True: event, values = Window.read() print(event, values) if event is None or event == 'sair': break if event == 'PROCURAR': KEYWORD = Window['keywords'].Get()
import PySimpleGUIQt as sg import imwatchingyou """ Combining the imwatchingyou debugger package with PySimpleGUIQt This enables you to have a live debugger / REPL in a running PySimpleGUIQt program """ layout = [[sg.Text('My PySimpleGUIQt layout')], [sg.B('OK'), sg.B('Debugger'), sg.B('Popout')]] window = sg.Window('My window', layout) counter = 0 # something to see updating in the popout window while True: event, values = window.read(timeout=100) if event is None: break if event == 'Debugger': imwatchingyou.show_debugger_window() elif event == 'Popout': imwatchingyou.show_debugger_popout_window() imwatchingyou.refresh_debugger() counter += 1
import PySimpleGUIQt as sg import imwatchingyou """ Combining the imwatchingyou debugger package with PySimpleGUIQt This enables you to have a live debugger / REPL in a running PySimpleGUIQt program """ layout = [[sg.Text('My PySimpleGUIQt layout')], [sg.Button('OK'), sg.Button('Debugger'), sg.B('Popout')]] window = sg.Window('My window', layout) counter = 0 # something to see updating in the popout window while True: event, values = window.Read(timeout=100) if event is None: break if event == 'Debugger': imwatchingyou.show_debugger_window() elif event == 'Popout': imwatchingyou.show_debugger_popout_window() imwatchingyou.refresh_debugger() counter += 1
import PySimpleGUIQt as sg import pandas as pd import sweetviz as sv from datetime import datetime sg.theme('dark teal 9') # sg.theme_previewer() # Black, DarkTeal9, DarkBlue2, DarkGrey6 ftypes = (('Excel', '*.xls'), ('Excel', '*.xlsx')) layout = [ [sg.I('Select File', key='-FILE-'), sg.FileBrowse('Browse', file_types=ftypes)], [sg.B('OK', bind_return_key=True), sg.B('Cancel')], ] window = sg.Window('ml4all', layout, font='Any 14', element_padding=(5, 5)) def on_ok(): print(values['-FILE-']) df = pd.read_excel(values['-FILE-']) c = df.select_dtypes(include=['object']).columns df[c] = df[c].fillna('NA').apply(str) # i = df.select_dtypes(include=['int']).columns # df[i] = df[i].fillna(0).apply(int) # f = df.select_dtypes(include=['float']) # df[f] = df[f].fillna(0.0).apply(float) # d = df.select_dtypes(include=['datetime'])
key='Ext', tooltip='Local onde as pastas contendo os documentos estão.'), sg.T("(sem ponto, Ex: pdf)"), sg.Stretch() ], [ sg.T("SAÍDA:", tooltip='Local onde os documentos serão copiados.', size=(10, 1)), sg.I(size=(92, 1), key='Saida', tooltip='Local onde as pastas contendo os documentos estão.'), sg.FolderBrowse("PASTA", size=(8, 1), tooltip='Procurar pasta.'), sg.Stretch() ], [sg.B('EXECUTAR', tooltip='Executar análise.', key='exec', size=(10, 1))], [ sg.T("MENSAGENS:", size=(14, 1), tooltip='Mensagens provindas do processo executado.'), sg.Stretch(), sg.B("MODO DE USAR", key='usar', tooltip='Descrição do preenchimento de cada campo.', size=(15, 1)) ], [sg.Output(key='out')], [ sg.B("LIMPAR", key='limpar', size=(10, 1), tooltip="Limpa o texto da caixa de mensagens."),
sg.theme('Reddit') Layout = [[sg.T("Tecla para iniciar:"), sg.I(key='in', size=(20, 1))], [sg.T("Tecla acionada:"), sg.I(key='do', size=(20, 1))], [sg.T("Tecla para parar:"), sg.I(key='out', size=(20, 1))], [ sg.T("Intervalo:"), sg.I(default_text='0.1', key='tim', size=(20, 1)) ], [ sg.T("Status:"), sg.Stretch(), sg.B("Executar", key='exec', size=(10, 1)) ], [sg.Multiline(autoscroll=True, key='multi', disabled=True)]] Window = sg.Window("AutoClicker", layout=Layout, font="SEGOEUI 11") while True: event, values = Window.read(timeout=1000) if event is None: break if event == 'exec': START = Window['in'].Get() END = Window['out'].Get() DO = Window['do'].Get() TIME = float(Window['tim'].Get().replace(",", '.')) if (START == '' or START == ' ' or START is None) or ( END == '' or END == ' '
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()
def open_note(name, config): g.SetOptions(background_color=config.background_color, text_color=config.text_color, input_elements_background_color=config.background_color, input_text_color=config.text_color, button_color=(config.text_color, config.background_color), border_width=config.border_width, font=('Arial', int(config.font_size))) with open(NOTES_PATH, 'r+') as notes: note_obj = json.load(notes) match = False content = '' for k, v in note_obj.items(): if name == k: match = True content = v if match == False: print('No Note Found With That Name') exit(1) layout = [[ g.T(name, font=('Arial', int(config.title_size)), justification='center') ], [g.Multiline(content, size=(50, 5), key='content')], [g.B('Close'), g.B('Delete'), g.B('Save')]] window = g.Window('Create', no_titlebar=NTB, keep_on_top=True, grab_anywhere=True, layout=layout, alpha_channel=float(config.alpha)) while True: event, value = window.Read() if event == 'Close': window.Close() break elif event == 'Save': note_obj[name] = value['content'] with open(NOTES_PATH, 'r+') as notes: notes.seek(0) notes.truncate() json.dump(note_obj, notes, indent=4) window.Close() break elif event == 'Delete': new_layout = [[ g.T('Are you sure you want to delete {}?'.format(name), justification='center') ], [g.B('No'), g.B('Yes')]] confirm_window = g.Window('', no_titlebar=NTB, keep_on_top=True, grab_anywhere=True, layout=new_layout) while True: event1, value1 = confirm_window.Read() if event1 == 'Yes': note_obj.pop(name, []) with open(NOTES_PATH, 'r+') as notes: notes.seek(0) notes.truncate() json.dump(note_obj, notes, indent=4) confirm_window.Close() break else: confirm_window.Close() break window.Close() break
import os from http.server import HTTPServer, CGIHTTPRequestHandler import socket import PySimpleGUIQt as sg from concurrent.futures import ThreadPoolExecutor from threading import enumerate import ctypes import webbrowser sg.theme("Reddit") sg.SetOptions(button_color=("000000", "000000"), button_element_size=(8, 0.9), auto_size_buttons=True, auto_size_text=True) Layout = [[sg.T("ONLINE FILE SHARING SYSTEM", font="Arial 12 bold", justification="center")], [sg.T()], [sg.T("FOLDER:", size=(7, 1), justification="center"), sg.I(key="pasta", size=(46, 0.9)), sg.FolderBrowse("BROWSE", size=(10, 0.95))], [sg.T(size=(20,1)), sg.B("RUN", size=(8, 0.9)), sg.B("STOP", disabled=True, size=(8, 0.9)), sg.B("EXIT", size=(8, 0.9))], [sg.Output(background_color="Black", text_color="White")]] window = sg.Window('File Sharing System', resizable=False, size=(600, 300)).layout(Layout) def terminate_thread(thread): if not thread.isAlive(): return exc = ctypes.py_object(SystemExit) res = ctypes.pythonapi.PyThreadState_SetAsyncExc( ctypes.c_long(thread.ident), exc) if res == 0: raise ValueError("nonexistent thread id") elif res > 1: ctypes.pythonapi.PyThreadState_SetAsyncExc(thread.ident, None)
return f'{self.num} {self.psg_object}' @staticmethod def headers(): return 'num,psg_object'.split(',') items = [ ParsingError(dicta1, 45), ParsingError(dicta2, 42), ParsingError(dicta3, 12), ] window = sg.Window('Test', [ [sg.Listbox(items, key='qwe', enable_events=True)], [sg.B('q1'), sg.B('q2'), sg.B('q3')], ], return_keyboard_events=True) while True: event, values = window() if event in ('Exit', None): break print(event, values) if event == 'q1': gui = values['qwe'][0] print(gui.num) print(gui.psg_object[4]) window.close()
""" Get absolute path to resource, works for dev and for PyInstaller """ base_path = getattr(sys, '_MEIPASS', os.path.dirname(os.path.abspath(__file__))) return os.path.join(base_path, relative_path) prototext = resource_path("colorization_deploy_v2.prototxt") caffemodel = resource_path("colorization_release_v2.caffemodel") npyfile = resource_path("pts_in_hull.npy") sg.ChangeLookAndFeel('Reddit') sg.set_options(button_color=("0079d3", "0079d3"), button_element_size=(10, 1), text_justification="center") col1 = [[sg.T("IMAGEM:", size=(44, 1)), sg.I(size=(0, 0), visible=False, key="img", enable_events=True), sg.FileBrowse("SELECIONAR", file_types=(("Imagem", "*.png; *.jpg; *.jpeg"),), target="img")], [sg.Image(filename=resource_path("placeholder.png"), key="img_display")]] col2 = [[sg.T('RESULTADO:', size=(44, 1)), sg.I(size=(0, 0), visible=False, key="savefile", enable_events=True), sg.B("COLORIR", key="processar")], [sg.Image(filename=resource_path("placeholder.png"), key="img_display2", )]] tab1_layout = [[sg.Column(col1), sg.Column(col2)], [sg.Exit(key="EXIT"), sg.FileSaveAs("SALVAR", file_types=(("Imagem", "*.jpg"),), target='savefile', key="savefilebrowse", disabled=True, button_color=("black","grey"))]] tab2_layout = [[sg.T('PASTA:'), sg.I(key="pasta", size=(98,1)), sg.FolderBrowse()], [sg.B("COLORIR")], [sg.Exit(key="Exit")]] layout = [[sg.T("\t\t\t\t\tCOLORIZADOR DE FOTOS EM PRETO E BRANCO", font=("Arial 12 bold"))], [sg.TabGroup([[sg.Tab('COLORIR ARQUIVO ÚNICO', tab1_layout), sg.Tab('COLORIR LOTE', tab2_layout)]])]] window = sg.Window('Monografia do vértice genérica', layout, size=(1000, 700), auto_size_text=True, auto_size_buttons=False, resizable=False) FileIMG = None
import sys import PySimpleGUIQt as sg ''' ''' layout = [ [sg.InputText()], [sg.Button('7'),sg.Button('8'),sg.Button('9'),sg.B('+')], [sg.Button('4'), sg.Button('5'), sg.Button('6'), sg.B('=')] ] window = sg.Window('计算器', layout) str="" while True: event, values = window.read() if event in (None,'exit'): window.close() break if event == '=': print(eval(str)) str = "" str = str+event print(str)