""" A python tool for batch importing excel/csv files into mysql database. Author: ryjfgjl Date: 2020-01-05 """ Version = "2.0" # import GUI model import PySimpleGUI as sg import traceback import sys from common.handleconfig import HandleConfig sg.ChangeLookAndFeel('dark') HandleConfig = HandleConfig() # database connection host = HandleConfig.handle_config("g", "dbinfo", "host") port = HandleConfig.handle_config("g", "dbinfo", "port") user = HandleConfig.handle_config("g", "dbinfo", "user") passwd = HandleConfig.handle_config("g", "dbinfo", "passwd") dbname = HandleConfig.handle_config("g", "dbinfo", "dbname") # file information file_dir = HandleConfig.handle_config("g", "file", "file_dir") csv_encoding = HandleConfig.handle_config("g", "file", "csv_encoding") na_values = HandleConfig.handle_config("g", "file", "na_values") def exception_format(): """
def Launcher(): sg.ChangeLookAndFeel('LightGreen') layout = [ [ sg.T('Папка с json файлами'), sg.In(key='dir', size=(40, 1)), sg.FolderBrowse() ], [ sg.T('URL видео'), sg.In(key='url', size=(40, 1)), ], [ sg.T('Фильтр значений'), sg.In(default_text=10, key='filter', size=(40, 1)), ], # [sg.Frame('LOG', layout=[[sg.Output(size=(65, 15))]])], [ sg.ReadFormButton('Начать', bind_return_key=True), sg.SimpleButton('Quit', button_color=('white', 'firebrick3')), ] ] window = sg.Window( 'JSON to CSV and DB GUI', auto_size_text=False, auto_size_buttons=False, default_element_size=( 20, 1, ), # text_justification='right', ) window.Layout(layout) # ---===--- Loop taking in user input --- # while True: try: (button, values) = window.Read() # print(button) # print(values) if button in ('Quit', None): break # exit button clicked source_dir = values[ 'dir'] # запись введенного начения директории в переменную files = os.listdir(source_dir) # список всех файлов в директории json_files = [file for file in files if '.json' in file ] # список всех файлов с расширением .json url = values[ 'url'] # запись введенного начения адреса видео в переменную filter = float( values['filter'] ) # запись введенного значения фильтрации в переменную export_to_csv = f'{source_dir}/FINAL.csv' # файл для сохранения в формате .csv export_to_db = f'{source_dir}/FINAL.db' # файл для сохранения в формате.db path_to_excel = f'{source_dir}/FINAL.xlsx' # файл для сохранения в формате .xlsx if button == 'Начать': if not source_dir: sg.PopupError('Укажите папку с json файлами') elif not files: sg.PopupError('Папку пуста') elif not json_files: sg.PopupError('В папке нет json файлов') elif not url: sg.PopupError('Укажите url') elif not filter: sg.PopupError('Укажите фильтр значений') else: try: # файлы создаются при каждом запуске скрипта, а предидущие версии удаляются os.remove(export_to_csv) os.remove(export_to_db) except FileNotFoundError: pass print(f'Папка с json файлами: {source_dir}') print(f'Адрес видео: {url}') print(f'Параметр для фильтрации: {filter}') print(f'{"_" * 200}') print(f'Обнаружено {len(json_files)} json файлов') episodes = parse_youtube(url) print(f'Получены эпизоды с временными метками: {episodes}') print(f'{"_" * 200}') for file in json_files: # для каждого json файла в папке try: print(f'\nФайл на обработке: {file}') df = unite_func(source_dir, file, episodes, filter) # получить dataframe print('Файл успешно обработан') print(f'Запись в csv: {export_to_csv}') df.to_csv(export_to_csv, index=False, header=not os.path.exists(export_to_csv), mode='a' if os.path.exists(export_to_csv) else 'a') print(f'Запись в DB: {export_to_db}') con = sl.connect(export_to_db) df.to_sql('frame_of_emotions', con, if_exists='append', index=False) con.commit() con.close() except Exception as inner_error: print(f'Произошла ошибка:\n{inner_error}') else: print(f'\nВсе файлы были успешно обработаны!') print(f'\nСоздание Excel и построение графиков.') create_excel(export_to_csv, path_to_excel) print(f'DONE!\nПроверьте папку {source_dir}') sg.PopupOK(f' DONE! ') except Exception as error: sg.PopupError(f'Произошла ошибка:\n{error}')
import PySimpleGUI as sg """ Turn off padding in order to get a really tight looking layout. """ sg.ChangeLookAndFeel('Dark') sg.SetOptions(element_padding=(0, 0)) layout = [[ sg.T('Notes:', pad=((3, 0), 0)), sg.In(size=(44, 1), background_color='white', text_color='black', key='notes') ], [ sg.T('Output:', pad=((3, 0), 0)), sg.T('', size=(44, 1), text_color='white', key='output') ], [ sg.CBox('Checkbox:', default=True, pad=((3, 0), 0), key='cbox'), sg.Listbox((1, 2, 3, 4), size=(8, 3), key='listbox'), sg.Radio('Radio 1', default=True, group_id='1', key='radio1'), sg.Radio('Radio 2', default=False, group_id='1', key='radio2') ], [ sg.Spin((1, 2, 3, 4), 1, key='spin'), sg.OptionMenu((1, 2, 3, 4), key='option'), sg.Combo(values=(1, 2, 3, 4), key='combo') ], [sg.Multiline('Multiline', size=(20, 3), key='multi')], [sg.Slider((1, 10), size=(20, 20), orientation='h', key='slider')], [
def Everything(): sg.ChangeLookAndFeel('Dark') form = sg.FlexForm('Everything bagel', default_element_size=(40, 1)) column1 = [ [ sg.Text('Column 1', background_color='black', justification='center', size=(10, 1)) ], [sg.Spin(values=('Spin Box 1', '2', '3'), initial_value='Spin Box 1')], [sg.Spin(values=('Spin Box 1', '2', '3'), initial_value='Spin Box 2')], [sg.Spin(values=('Spin Box 1', '2', '3'), initial_value='Spin Box 3')] ] layout = [ [ sg.Text('All graphic widgets in one form!', size=(30, 1), font=("Helvetica", 25)) ], [sg.Text('Here is some text.... and a place to enter text')], [sg.InputText('This is my text')], [ sg.Checkbox('Checkbox'), sg.Checkbox('My second checkbox!', default=True) ], [ sg.Radio('My first Radio! ', "RADIO1", default=True), sg.Radio('My second Radio!', "RADIO1") ], [ sg.Multiline( default_text= 'This is the default Text should you decide not to type anything', size=(35, 3)), sg.Multiline(default_text='A second multi-line', size=(35, 3)) ], [ sg.InputCombo(('Combobox 1', 'Combobox 2'), size=(20, 1)), sg.Slider(range=(1, 100), orientation='h', size=(34, 20), default_value=85) ], [ sg.InputOptionMenu( ('Menu Option 1', 'Menu Option 2', 'Menu Option 3')) ], [ sg.Listbox(values=('Listbox 1', 'Listbox 2', 'Listbox 3'), size=(30, 3)), sg.Slider(range=(1, 100), orientation='v', size=(5, 20), default_value=25), sg.Slider(range=(1, 100), orientation='v', size=(5, 20), default_value=75), sg.Slider(range=(1, 100), orientation='v', size=(5, 20), default_value=10), sg.Column(column1, background_color='black') ], [sg.Text('_' * 80)], [sg.Text('Choose A Folder', size=(35, 1))], [ sg.Text('Your Folder', size=(15, 1), auto_size_text=False, justification='right'), sg.InputText('Default Folder'), sg.FolderBrowse() ], [sg.Submit(), sg.Cancel()] ] button, values = form.LayoutAndRead(layout) sg.Popup('Title', 'The results of the form.', 'The button clicked was "{}"'.format(button), 'The values are', values)
import PySimpleGUI as sg from bulk_archiver import Extractall, MakeArchiver from __init__ import logger # sg.theme('Dark Blue 3') sg.ChangeLookAndFeel('GreenTan') task_types = [ {'text': '批量解压', 'key': '__ExtractAll__', 'tooltip': '批量解压任务, 解压来源目录下包括子目录下的所有7z, zip, rar文件'}, {'text': '批量压缩', 'key': '__MakeArchiver__', 'tooltip': '批量压缩任务, 仅压缩来源目录下的第一层文件夹'}, ] # radio = [[sg.Radio(task['text'], 1),] for task in task_types] radio = [sg.Radio(task['text'], 1, key=task['key'], tooltip=task['tooltip']) for task in task_types] layout = [ [sg.Text('批量压缩解压工具', size=(20, 1)),], # [sg.Text('选择要解压的文件所在的根目录(解压所选择的文件夹下所有的压缩文件)')], # [sg.Radio('批量解压', 1, default=True, key='__TASK_UNZIP__', tooltip='批量解压任务'), sg.Radio('批量压缩', group_id=1, default=False, key='__TASK_ZIP__', tooltip='批量压缩任务')] radio, [sg.Text('选择来源文件夹', size=(16, 1)), sg.FolderBrowse(key='__SOURCE__', size=(16, 1))], [sg.Text('选择目标文件夹', size=(16, 1)), sg.FolderBrowse(key='__TARGET__', size=(16, 1))], [sg.Text('解压密码(非必须)', size=(16, 1), justification='left'), sg.Input("", key="__PWD__", size=(16, 1))], [sg.Frame(layout=[[sg.Submit("Submit"), sg.Cancel("Cancel")]], title='')] ] window = sg.Window('批量解压和批量压缩程序', layout, size=(500, 350), element_justification='center', grab_anywhere=False, resizable=False) def run_gui():
def main(): # Make the layout less cluttered and allow bulk-changes to text formatting def Txt(text, **kwargs): return (sg.Text(text, font=('Helvetica 8'), **kwargs)) # Update a Text Element def Txt_Update(window, key, value): window.FindElement(key).Update(value) # ---------------- Create Window ---------------- sg.ChangeLookAndFeel('Black') sg.SetOptions(element_padding=(0, 0), margins=(1, 1), border_width=0) def GraphColumn(name, key): return sg.Column( [ [ Txt(name, key=key + 'TXT_'), ], [ sg.Graph( (GRAPH_WIDTH, GRAPH_HEIGHT), (0, 0), (GRAPH_WIDTH, 100), background_color='black', key=key + 'GRAPH_', ) ], ], pad=(2, 2), ) layout = [ [ sg.Text('System Status Dashboard' + ' ' * 18), sg.Button('', image_data=red_x, button_color=('black', 'black'), key='Exit', tooltip='Closes window') ], [ GraphColumn('Net Out', '_NET_OUT_'), GraphColumn('Net In', '_NET_IN_') ], [ GraphColumn('Disk Read', '_DISK_READ_'), GraphColumn('Disk Write', '_DISK_WRITE_') ], [ GraphColumn('CPU Usage', '_CPU_'), GraphColumn('Memory Usage', '_MEM_') ], ] window = sg.Window( 'PSG System Dashboard', keep_on_top=True, auto_size_buttons=False, grab_anywhere=True, no_titlebar=True, default_button_element_size=(12, 1), return_keyboard_events=True, alpha_channel=ALPHA, use_default_focus=False, ).Layout(layout).Finalize() # setup graphs & initial values netio = psutil.net_io_counters() net_graph_in = DashGraph(window.FindElement('_NET_IN_GRAPH_'), netio.bytes_recv, '#23a0a0') net_graph_out = DashGraph(window.FindElement('_NET_OUT_GRAPH_'), netio.bytes_sent, '#56d856') diskio = psutil.disk_io_counters() disk_graph_write = DashGraph(window.FindElement('_DISK_WRITE_GRAPH_'), diskio.write_bytes, '#be45be') disk_graph_read = DashGraph(window.FindElement('_DISK_READ_GRAPH_'), diskio.read_bytes, '#5681d8') cpu_usage_graph = DashGraph(window.FindElement('_CPU_GRAPH_'), 0, '#d34545') mem_usage_graph = DashGraph(window.FindElement('_MEM_GRAPH_'), 0, '#BE7C29') print(psutil.cpu_percent(percpu=True)) # ---------------- main loop ---------------- while (True): # --------- Read and update window once a second-------- event, values = window.Read(timeout=1000) if event in ( None, 'Exit' ): # Be nice and give an exit, expecially since there is no titlebar break # ----- Network Graphs ----- netio = psutil.net_io_counters() write_bytes = net_graph_out.graph_value(netio.bytes_sent) read_bytes = net_graph_in.graph_value(netio.bytes_recv) Txt_Update(window, '_NET_OUT_TXT_', 'Net out {}'.format(human_size(write_bytes))) Txt_Update(window, '_NET_IN_TXT_', 'Net In {}'.format(human_size(read_bytes))) # ----- Disk Graphs ----- diskio = psutil.disk_io_counters() write_bytes = disk_graph_write.graph_value(diskio.write_bytes) read_bytes = disk_graph_read.graph_value(diskio.read_bytes) Txt_Update(window, '_DISK_WRITE_TXT_', 'Disk Write {}'.format(human_size(write_bytes))) Txt_Update(window, '_DISK_READ_TXT_', 'Disk Read {}'.format(human_size(read_bytes))) # ----- CPU Graph ----- cpu = psutil.cpu_percent(0) cpu_usage_graph.graph_percentage_abs(cpu) Txt_Update(window, '_CPU_TXT_', '{0:2.0f}% CPU Used'.format(cpu)) # ----- Memory Graph ----- mem_used = psutil.virtual_memory().percent mem_usage_graph.graph_percentage_abs(mem_used) Txt_Update(window, '_MEM_TXT_', '{}% Memory Used'.format(mem_used))
def __init__(self, b_size=4): self.b_size = b_size self.board = None self.window = None sg.ChangeLookAndFeel('Reddit')
def main(): global g_interval, g_procs, g_exit # ---------------- Create Form ---------------- sg.ChangeLookAndFeel('Black') layout = [ [ sg.Text('', size=(8, 1), font=('Helvetica', 20), text_color=sg.YELLOWS[0], justification='center', key='text') ], [ sg.Text('', size=(30, 8), font=('Courier New', 12), text_color='white', justification='left', key='processes') ], [ sg.Exit(button_color=('white', 'firebrick4'), pad=((15, 0), 0), size=(9, 1)), sg.Spin([x + 1 for x in range(10)], 3, key='spin') ], ] window = sg.Window('CPU Utilization', no_titlebar=True, keep_on_top=True, alpha_channel=.8, grab_anywhere=True).Layout(layout) # start cpu measurement thread thread = Thread(target=CPU_thread, args=(None, )) thread.start() timeout_value = 1 # make first read really quick g_interval = 1 # ---------------- main loop ---------------- while (True): # --------- Read and update window -------- event, values = window.Read(timeout=timeout_value, timeout_key='Timeout') # --------- Do Button Operations -------- if event is None or event == 'Exit': break timeout_value = int(values['spin']) * 1000 cpu_percent = g_cpu_percent display_string = '' if g_procs: # --------- Create list of top % CPU porocesses -------- try: top = {proc.name(): proc.cpu_percent() for proc in g_procs} except: pass top_sorted = sorted(top.items(), key=operator.itemgetter(1), reverse=True) if top_sorted: top_sorted.pop(0) display_string = '' for proc, cpu in top_sorted: display_string += '{:2.2f} {}\n'.format(cpu / 10, proc) # --------- Display timer and proceses in window -------- window.FindElement('text').Update('CPU {}'.format(cpu_percent)) window.FindElement('processes').Update(display_string) g_exit = True thread.join()
def _choose_auto_watches(self, my_locals): sg.ChangeLookAndFeel(COLOR_SCHEME) num_cols = 3 output_text = '' num_lines = 2 cur_col = 0 layout = [[ sg.Text('Choose your "Auto Watch" variables', font='ANY 14', text_color='red') ]] longest_line = max([len(key) for key in my_locals]) line = [] sorted_dict = {} for key in sorted(my_locals.keys()): sorted_dict[key] = my_locals[key] for key in sorted_dict: line.append( sg.CB(key, key=key, size=(longest_line, 1), default=self.local_choices[key] if key in self.local_choices else False)) if cur_col + 1 == num_cols: cur_col = 0 layout.append(line) line = [] else: cur_col += 1 if cur_col: layout.append(line) layout += [[ sg.Text('Custom Watch (any expression)'), sg.Input(default_text=self.custom_watch, size=(40, 1), key='_CUSTOM_WATCH_') ]] layout += [[ sg.Ok(), sg.Cancel(), sg.Button('Clear All'), sg.Button('Select [almost] All', key='_AUTO_SELECT_') ]] window = sg.Window('All Locals', layout, icon=PSGDebugLogo).Finalize() while True: # event loop event, values = window.Read() if event in (None, 'Cancel'): break elif event == 'Ok': self.local_choices = values self.custom_watch = values['_CUSTOM_WATCH_'] break elif event == 'Clear All': sg.PopupQuickMessage('Cleared Auto Watches', auto_close=True, auto_close_duration=3, non_blocking=True, text_color='red', font='ANY 18') for key in sorted_dict: window.Element(key).Update(False) window.Element('_CUSTOM_WATCH_').Update('') elif event == 'Select All': for key in sorted_dict: window.Element(key).Update(False) elif event == '_AUTO_SELECT_': for key in sorted_dict: window.Element(key).Update(not key.startswith('_')) # exited event loop window.Close() sg.ChangeLookAndFeel('SystemDefault')
layout = [ [ sg.Slider(orientation='horizontal', range=(0, 100), enable_events=True, tick_interval=25) ], [ sg.Menu(menu_definition=[[ 'File', ['New::new-file', 'Open::open-file'] ]]) ], # [ # sg.Menu(menu_definition=[['&File', ['!&Open', '&Save::savekey', '---', '&Properties', 'E&xit']], # ['&Edit', ['!&Paste', ['Special', 'Normal', ], 'Undo'], ], # ['&Debugger', ['Popout', 'Launch Debugger']], # ['&Toolbar', ['Command &1', 'Command &2', 'Command &3', 'Command &4']], # ['&Help', '&About...'], ]) # ], ] return layout if __name__ == '__main__': sg.ChangeLookAndFeel('DarkGrey') window = sg.Window(title='Window', layout=init_layout(), margins=(100, 50)) while True: event, values = window.read() if (event is not None) or (values is not None): print(f'E: {event},\tV: {values}') window.close()
def main(): # init ------------------------------------------------------------- while True: # INIT cycle -------------------------------------- sg.ChangeLookAndFeel('SystemDefault') _gl = Class_GLBL() # rep = _gl.read_cfg_soft() if rep[0] > 0: err_lmb('main', s_lmb('Could not read table *cfg_soft*!') + s_lmb(rep[1])) return 0 # _gl.trm.rd_term_FUT() if _gl.trm.err_status > 0: err_lmb('main', s_lmb('Could not read term *data_file*!') + s_lmb(_gl.trm.err_status)) else: #ok_lmb('main', s_lmb('Read term *data_file* successfully !')) os.system('cls') # on windows # _gl.trm.rd_term_HST() if _gl.trm.err_status > 0: err_lmb('main', s_lmb('Could not read term *hist_file*!') + s_lmb(_gl.trm.err_status)) else: #ok_lmb('main', s_lmb('Read term *hist_file* successfully !')) os.system('cls') # on windows break # wndw = sg.Window('START').Layout([menu_def, [sg.Exit()]]) wndw = wndw_menu_CFG_SOFT(wndw, _gl) # while True: # MAIN cycle -------------------------------------- # for sg.Input must be => wndw.Read() OR timeout > 10000 evn, val = wndw.Read(timeout = 3000) print('----------------------------------------------') print('evn = ', evn, ' val =', val) if evn in (None, 'Exit'): break # if evn == '__TIMEOUT__': try: #--- Read file DATA --------------------------------------- _gl.trm.rd_term_FUT() _gl.stastus_bar = _gl.trm.account.dt + 3*' ' if _gl.trm.err_status > 0: _gl.stastus_bar += 'Error DATA - ' + str(_gl.trm.err_status) _gl.trm.err_rd_term() else: _gl.trm.cnt_errors = 0 _gl.stastus_bar += 'Got new DATA' #--- Read file HIST --------------------------------------- dtt = datetime.strptime(_gl.trm.account.dt, "%d.%m.%Y %H:%M:%S") if dtt.minute == _gl.trm.time_1_min: _gl.stastus_bar += ' Did not read HIST, it is not time' else: _gl.trm.time_1_min = dtt.minute _gl.trm.rd_term_HST() if _gl.trm.err_status > 0: _gl.stastus_bar += ' Error HIST - ' + str(_gl.trm.err_status) _gl.trm.err_rd_term() else: _gl.stastus_bar += ' Got new HIST' #--- If is not errors READ files then: -------------------- # update tables 'data_FUT' & 'hist_FUT' if _gl.trm.err_status == 0: buf_arr_1, buf_arr_2 = [], [] frm = '%d.%m.%Y %H:%M:%S' # buf_arr_1 = ((j,) for j in _gl.trm.data_in_file) if len(_gl.trm.hist_in_file) > 0: for it in _gl.trm.hist_in_file: dtt = datetime.strptime(it.split('|')[0], frm) ind_sec = int(dtt.replace(tzinfo=timezone.utc).timestamp()) buf_arr_2.append([ind_sec, it]) # rep = _gl.db_TODAY.update_2_tbl('data_FUT', buf_arr_1, 'hist_FUT', buf_arr_2) if rep[0] > 0: _gl.trm.err_rd_term('main', rep[1], err_log = True) #err_lmb('main', s_lmb('Could not update tables ') + s_lmb(rep[1])) # except Exception as ex: _gl.trm.err_rd_term('main', str(ex), err_log = True) #print('_gl.wndw_menu = ', _gl.wndw_menu) if _gl.wndw_menu == 'CFG_SOFT': event_menu_CFG_SOFT(evn, val, wndw, _gl) elif _gl.wndw_menu == 'DATA_FUT_FILE': event_menu_DATA_FUT_FILE(evn, val, wndw, _gl) elif _gl.wndw_menu == 'DATA_HIST_FILE': event_menu_DATA_HIST_FILE(evn, val, wndw, _gl) elif _gl.wndw_menu == 'DATA_ACNT': event_menu_DATA_ACNT(evn, val, wndw, _gl) elif _gl.wndw_menu == 'DATA_PROFIT': event_menu_DATA_PROFIT(evn, val, wndw, _gl) else: pass # if evn == 'CFG_SOFT': wndw = wndw_menu_CFG_SOFT(wndw, _gl) elif evn == 'DATA_FUT_FILE': wndw = wndw_menu_DATA_FUT_FILE(wndw, _gl) elif evn == 'DATA_HIST_FILE': wndw = wndw_menu_DATA_HIST_FILE(wndw, _gl) elif evn == 'DATA_ACNT': wndw = wndw_menu_DATA_ACNT(wndw, _gl) elif evn == 'DATA_PROFIT': wndw = wndw_menu_DATA_PROFIT(wndw, _gl) elif evn == 'SAVE_HIST_FILE': event_menu_SAVE_HIST_FILE(evn, val, wndw, _gl) elif evn == 'CLR_HIST_FILE': event_menu_CLR_HIST_FILE(evn, val, wndw, _gl) elif evn == 'CLR_HIST_TBL': event_menu_CLR_HIST_TBL(evn, val, wndw, _gl) else: pass #ok_lmb('titul', 'message') return 0
def maincaller(): global fname global temp_cat global temp_id #Main Function [Read Dataset File] import PySimpleGUI as sg import sys sg.ChangeLookAndFeel('BlueMono') event, values = sg.Window('Select DataSet').Layout([[sg.Text('Browse Dataset File :')], [sg.In(), sg.FileBrowse()], [sg.CloseButton('Load'), sg.CloseButton('Cancel')]]).Read() fname = values[0] if not fname: sg.Popup("Cancel", "No filename supplied") raise SystemExit("Cancelling: no filename supplied") else: #----------------------------------Display Progress Bar for Load dataset window # layout the Window layout = [[sg.Text('Loading your File...')], [sg.ProgressBar(1000, orientation='h', size=(20, 20), key='progbar')], [sg.Cancel()]] # create the Window window = sg.Window('Loading...', layout) # loop that would normally do something useful for i in range(1000): # check to see if the cancel button was clicked and exit loop if clicked event, values = window.Read(timeout=6) if event == 'Cancel' or event is None: fname="" break # update bar with loop value +1 so that bar eventually reaches the maximum window.Element('progbar').UpdateBar(i + 1) # done with loop... need to destroy the window as it's still open loaddataset(fname) window.Close() #UserPanel() #-------------------------------Display Progress bar for Preprocessing Window # layout the Window event=sg.PopupYesNo('Can we Preprocess Data',title="Permissions") if event == 'Yes': layout = [[sg.Text('We are Analysing your Dataset')], [sg.ProgressBar(1000, orientation='h', size=(30, 20), key='progbar')], [sg.Cancel()]] # create the Window window = sg.Window('Please Wait...!', layout) # loop that would normally do something useful for i in range(1000): # check to see if the cancel button was clicked and exit loop if clicked event, values = window.Read(timeout=5) if event == 'Cancel' or event is None: fname="" break # update bar with loop value +1 so that bar eventually reaches the maximum window.Element('progbar').UpdateBar(i + 1) # done with loop... need to destroy the window as it's still open preprocess() #this is call the function else : sg.PopupError('Please Preprocess Dataset',title="Error") window.Close()
CONFIG_INI = 'config.ini' config = ConfigParser() config.read(CONFIG_INI) API_HOST = config['default']['api_host'] EXCLUDE_PORTS = config['default']['exclude_ports'].split() SERVER_NAME = config['default']['server_name'] telegram = NotificationHandler('telegram', defaults={ 'token': config['default']['telegram_api'], 'chat_id': config['default']['telegram_id'] }) logger.add(telegram, level=logging.ERROR) sg.ChangeLookAndFeel('Reddit') window = sg.Window("SMS Deliver") table = sg.Table( [[' ' * 15, ' ' * 18, ' ' * 12, ' ' * 8, ' ' * 8, ' ' * 12, ' ' * 36]], size=(200, 33), max_col_width=100, headings=[ 'Port', 'IMSI', 'Network', 'SMS count', 'Fails', 'Signal', 'Status' ], justification='right', key='thread_table') window.Layout([[ sg.Column([[table]]), sg.Column([ [sg.Button("Refresh ports", key='refresh')], [sg.T("")],
def PlayGame(): menu_def = [ ['&File', ['&Open PGN File', 'E&xit']], ['&Help', '&About...'], ] # sg.SetOptions(margins=(0,0)) sg.ChangeLookAndFeel('GreenTan') # create initial board setup board = copy.deepcopy(initial_board) # the main board display layout board_layout = [[sg.T(' ')] + [ sg.T('{}'.format(a), pad=((23, 27), 0), font='Any 13') for a in 'abcdefgh' ]] # loop though board and create buttons with images for i in range(8): row = [sg.T(str(8 - i) + ' ', font='Any 13')] for j in range(8): piece_image = images[board[i][j]] row.append(render_square(piece_image, key=(i, j), location=(i, j))) row.append(sg.T(str(8 - i) + ' ', font='Any 13')) board_layout.append(row) # add the labels across bottom of board board_layout.append([sg.T(' ')] + [ sg.T('{}'.format(a), pad=((23, 27), 0), font='Any 13') for a in 'abcdefgh' ]) # setup the controls on the right side of screen openings = ('Any', 'Defense', 'Attack', 'Trap', 'Gambit', 'Counter', 'Sicillian', 'English', 'French', 'Queen\'s openings', 'King\'s Openings', 'Indian Openings') board_controls = [ [sg.RButton('New Game', key='Open PGN File'), sg.RButton('Draw')], [sg.RButton('Resign Game'), sg.RButton('Set FEN')], [sg.RButton('Player Odds'), sg.RButton('Training')], [sg.Drop(openings), sg.Text('Opening/Style')], [sg.CBox('Play a White', key='_white_')], [sg.Text('Move List')], [ sg.Multiline([], do_not_clear=True, autoscroll=True, size=(15, 10), key='_movelist_') ], ] # layouts for the tabs controls_layout = [[ sg.Text('Performance Parameters', font='_ 20') ], [sg.T('Put stuff like AI engine tuning parms on this tab')]] statistics_layout = [[sg.Text('Statistics', font=('_ 20'))], [sg.T('Game statistics go here?')]] board_tab = [[sg.Column(board_layout)]] # the main window layout layout = [[sg.Menu(menu_def, tearoff=False)], [ sg.TabGroup([[ sg.Tab('Board', board_tab), sg.Tab('Controls', controls_layout), sg.Tab('Statistics', statistics_layout) ]], title_color='red'), sg.Column(board_controls) ], [sg.Text('Click anywhere on board for next move', font='_ 14')]] window = sg.Window('Chess', default_button_element_size=(12, 1), auto_size_buttons=False, icon='kingb.ico').Layout(layout) # ---===--- Loop taking in user input --- # i = 0 moves = None while True: button, value = window.Read() if button in (None, 'Exit'): break if button == 'Open PGN File': filename = sg.PopupGetFile('', no_window=True) if filename is not None: moves = open_pgn_file(filename) i = 0 board = copy.deepcopy(initial_board) window.FindElement('_movelist_').Update(value='') if button == 'About...': sg.Popup('Powerd by Engine Kibitz Chess Engine') if type(button) is tuple and moves is not None and i < len(moves): move = moves[i] # get the current move window.FindElement('_movelist_').Update(value='{} {}\n'.format( i + 1, str(move)), append=True) move_from = move.from_square # parse the move-from and move-to squares move_to = move.to_square row, col = move_from // 8, move_from % 8 piece = board[row][col] # get the move-from piece button = window.FindElement(key=(row, col)) for x in range(3): button.Update(button_color=('white', 'red' if x % 2 else 'white')) window.Refresh() time.sleep(.05) board[row][col] = BLANK # place blank where piece was row, col = move_to // 8, move_to % 8 # compute move-to square board[row][col] = piece # place piece in the move-to square redraw_board(window, board) i += 1
def __init__(self, controlador): sg.ChangeLookAndFeel('Reddit') super().__init__(controlador, nome_tela='Fornecedores')
def _build_floating_window(self): if self.popout_window: # if floating window already exists, close it first self.popout_window.Close() sg.ChangeLookAndFeel('Topanga') num_cols = 2 width_var = 15 width_value = 30 layout = [] line = [] col = 0 self.popout_choices = self.local_choices if self.popout_choices == {}: # if nothing chosen, then choose all non-_ variables for key in sorted(self.locals.keys()): self.popout_choices[key] = not key.startswith('_') width_var = max([len(key) for key in self.popout_choices]) for key in self.popout_choices: if self.popout_choices[key] is True: value = str(self.locals.get(key)) h = min( len(value) // width_value + 1, MAX_LINES_PER_RESULT_FLOATING) line += [ sg.Text(f'{key}', size=(width_var, 1), font=POPOUT_WINDOW_FONT), sg.Text(' = ', font=POPOUT_WINDOW_FONT), sg.Text(value, key=key, size=(width_value, h), font=POPOUT_WINDOW_FONT) ] if col + 1 < num_cols: line += [sg.VerticalSeparator(), sg.T(' ')] col += 1 if col >= num_cols: layout.append(line) line = [] col = 0 if col != 0: layout.append(line) layout = [[ sg.Column(layout), sg.Column([[ sg.Button('', key='_EXIT_', image_data=red_x, button_color=('#282923', '#282923'), border_width=0) ]]) ]] self.popout_window = sg.Window( 'Floating', layout, alpha_channel=0, no_titlebar=True, grab_anywhere=True, element_padding=(0, 0), margins=(0, 0), keep_on_top=True, right_click_menu=[ '&Right', ['Debugger::RightClick', 'Exit::RightClick'] ], ).Finalize() screen_size = self.popout_window.GetScreenDimensions() self.popout_window.Move(screen_size[0] - self.popout_window.Size[0], 0) self.popout_window.SetAlpha(1) sg.ChangeLookAndFeel('SystemDefault') return True
# Date: 10/17/2019 # ISU Email: [email protected] # Description: This program automates the study process for the 2019 ARLAB user study from subprocess import call import random import psutil import PySimpleGUI as sg import csv import time import sys import datetime import os import shutil sg.ChangeLookAndFeel('SystemDefault') # ------ Menu Definition ------ # menu_def = [ ['File', ['Open', 'Save', 'Exit', 'Properties']], [ 'Edit', ['Paste', [ 'Special', 'Normal', ], 'Undo'], ], ['Help', 'About...'], ] # ------ Column Definition ------ #
def _build_main_debugger_window(self): sg.ChangeLookAndFeel(COLOR_SCHEME) def InVar(key1): row1 = [ sg.T(' '), sg.I(key=key1, size=(WIDTH_VARIABLES, 1)), sg.T('', key=key1 + 'CHANGED_', size=(WIDTH_RESULTS, 1)), sg.B('Detail', key=key1 + 'DETAIL_'), sg.B('Obj', key=key1 + 'OBJ_'), ] return row1 variables_frame = [ InVar('_VAR0_'), InVar('_VAR1_'), InVar('_VAR2_'), ] interactive_frame = [ [ sg.T('>>> ', size=(9, 1), justification='r'), sg.In( size=(83, 1), key='_INTERACTIVE_', tooltip= 'Type in any "expression" and it will be disaplayed below.' ), sg.B('Go', bind_return_key=True, visible=False) ], [ sg.T('CODE >>> ', justification='r', size=(9, 1)), sg. In(size=(83, 1), key='_CODE_', tooltip= 'Use for things like import or other statements / lines of code' ) ], [ sg.Multiline(size=(93, 26), key='_OUTPUT_', autoscroll=True, do_not_clear=True) ], ] autowatch_frame = [[ sg.Button('Choose Variables To Auto Watch', key='_LOCALS_'), sg.Button('Clear All Auto Watches'), sg.Button('Show All Variables', key='_SHOW_ALL_'), sg.Button('Locals', key='_ALL_LOCALS_'), sg.Button('Globals', key='_GLOBALS_'), sg.Button('Popout', key='_POPOUT_') ]] variable_values = [[ sg.T('', size=(WIDTH_WATCHER_VARIABLES, 1), key='_WATCH%s_' % i), sg.T( '', size=(WIDTH_WATCHER_RESULTS, MAX_LINES_PER_RESULT_MAIN), key='_WATCH%s_RESULT_' % i, ) ] for i in range(NUM_AUTO_WATCH)] var_layout = [] for i in range(NUM_AUTO_WATCH): var_layout.append([ sg.T('', size=(WIDTH_WATCHER_VARIABLES, 1), key='_WATCH%s_' % i), sg.T( '', size=(WIDTH_WATCHER_RESULTS, MAX_LINES_PER_RESULT_MAIN), key='_WATCH%s_RESULT_' % i, ) ]) col1 = [ # [sg.Frame('Auto Watches', autowatch_frame+variable_values, title_color='blue')] [ sg.Frame('Auto Watches', autowatch_frame + var_layout, title_color='blue') ] ] col2 = [[ sg.Frame('Variables or Expressions to Watch', variables_frame, title_color='blue'), ], [ sg.Frame('REPL-Light - Press Enter To Execute Commands', interactive_frame, title_color='blue'), ]] # Tab based layout layout = [[ sg.TabGroup( [[sg.Tab('Variables', col1), sg.Tab('REPL & Watches', col2)]]) ], [ sg.Button('', image_data=red_x, key='_EXIT_', button_color=None), ]] # ------------------------------- Create main window ------------------------------- window = sg.Window("I'm Watching You Debugger", layout, icon=PSGDebugLogo, margins=(0, 0)).Finalize() window.Element('_VAR1_').SetFocus() self.watcher_window = window sg.ChangeLookAndFeel( 'SystemDefault') # set look and feel to default before exiting return window
import sys import PySimpleGUI as sg import os import GUI.app_audio as app import GUI.playAudio as pl sg.ChangeLookAndFeel('SandyBeach') layout = [[ sg.Text('我是大白(●—●),我在听呢:', size=(150, 1), justification='left', font=("Terminal", 10), auto_size_text=True) ], [sg.Input(do_not_clear=False, size=(54, 1), key='_IN_')], [ sg.Button('开始合成语音(中文)', key='ShowChina'), sg.Button('开始合成语音(英文)', key='ShowEnglish'), sg.Button('退出系统', key='Exit') ], [ sg.Text('采样速率:', size=(10, 1), auto_size_text=True), sg.Text(' ', size=(10, 1), key='_OUTPUTFREQ_', auto_size_text=True) ], [ sg.Text('通道数量:', size=(10, 1), auto_size_text=True), sg.Text(' ', size=(10, 1), key='_OUTPUTCHAN_',
def pxxteste04(): sg.ChangeLookAndFeel('GreenTan') # ------ Menu Definition ------ # menu_def = [ ['File', ['Open', 'Save', 'Exit', 'Properties']], [ 'Edit', ['Paste', [ 'Special', 'Normal', ], 'Undo'], ], ['Help', 'About...'], ] # ------ Column Definition ------ # column1 = [ [ sg.Text('Column 1', background_color='#F7F3EC', justification='center', size=(10, 1)) ], [sg.Spin(values=('Spin Box 1', '2', '3'), initial_value='Spin Box 1')], [sg.Spin(values=('Spin Box 1', '2', '3'), initial_value='Spin Box 2')], [sg.Spin(values=('Spin Box 1', '2', '3'), initial_value='Spin Box 3')] ] layout = [ [sg.Menu(menu_def, tearoff=True)], [ sg.Text('Opções de Seleção e Consulta!', size=(30, 1), justification='center', font=("Helvetica", 25), relief=sg.RELIEF_RIDGE) ], [sg.Text('PESQUISA, informe:')], #[sg.Text('Jogo De: ', size=(5, 1)), sg.InputText()), sg.Text(' Até: ', size=(5, 2), sg.InputText())], [ sg.Text('Jogo De: ', size=(7, 0)), sg.Input(size=(5, 0), key='jde'), sg.Text(' Ate: ', size=(3, 0)), sg.InputText(size=(5, 0), key='jate') ], #[sg.Text(' Ate: ', size=(20, 0)), sg.InputText(size=(5,0), key='jate')], #[sg.InputText('This is my text')], #[sg.Frame(layout=[ # [sg.Checkbox('Checkbox', size=(10,1)), sg.Checkbox('My second checkbox!', default=True)], #[sg.Radio('My first Radio! ', "RADIO1", default=True, size=(10,1)), sg.Radio('My second Radio!', "RADIO1")]], title='Options',title_color='red', relief=sg.RELIEF_SUNKEN, tooltip='Use these to set flags')], # [sg.Multiline(default_text='This is the default Text should you decide not to type anything', size=(35, 3)), # sg.Multiline(default_text='A second multi-line', size=(35, 3))], # [sg.InputCombo(('Combobox 1', 'Combobox 2'), size=(20, 1)), # sg.Slider(range=(1, 100), orientation='h', size=(34, 20), default_value=85)], # [sg.InputOptionMenu(('Menu Option 1', 'Menu Option 2', 'Menu Option 3'))], # [sg.Listbox(values=('Listbox 1', 'Listbox 2', 'Listbox 3'), size=(30, 3)), # sg.Frame('Labelled Group',[[ # sg.Slider(range=(1, 100), orientation='v', size=(5, 20), default_value=25), # sg.Slider(range=(1, 100), orientation='v', size=(5, 20), default_value=75), # sg.Slider(range=(1, 100), orientation='v', size=(5, 20), default_value=10), # sg.Column(column1, background_color='#F7F3EC')]])], # [sg.Text('_' * 80)], # [sg.Text('Choose A Folder', size=(35, 1))], # [sg.Text('Your Folder', size=(15, 1), auto_size_text=False, justification='right'), # sg.InputText('Default Folder'), sg.FolderBrowse()], [sg.Submit(tooltip='Click to submit this window'), sg.Cancel()] ] window = sg.Window('Menu de Opções da Lotofacil', layout, default_element_size=(40, 1), grab_anywhere=False) event, values = window.read() window.Maximize() window.close() sg.popup('Title', 'The results of the window.', 'The button clicked was "{}"'.format(event), 'The values are', values)
#!/usr/bin/env Python3 import PySimpleGUI as sg # I was testing out the colors and use this to get arguments I could change fast... import sys if len(sys.argv) > 1: sg.ChangeLookAndFeel(sys.argv[1]) else: sg.ChangeLookAndFeel('SandyBeach') print(sg.ListOfLookAndFeelValues()) themeColor = '#ff6961' # # ------ Menu Definition ------ # # menu_def = [['File', ['Open', 'Save', 'Exit', 'Properties']], # ['Edit', ['Paste', ['Special', 'Normal', ], 'Undo'], ], # ['Help', 'About...'], ] # ------ Column Definition ------ # column1 = [[sg.Text('Column 1', justification='center', size=(10, 1))], [sg.Spin(values=('Spin Box 1', '2', '3'), initial_value='Spin Box 1')], [sg.Spin(values=('Spin Box 1', '2', '3'), initial_value='Spin Box 2')], [sg.Spin(values=('Spin Box 1', '2', '3'), initial_value='Spin Box 3')]] layout = [ # [sg.Menu(menu_def, tearoff=True)], [sg.Text('Welcome to the RhubarbPi installer!', size=(30, 1), justification='center', font=("Helvetica", 25), relief=sg.RELIEF_RIDGE)], [sg.Image(r'img/pi.png', size=(600,300))],
def pxxteste01(): # Green & tan color scheme sg.ChangeLookAndFeel('GreenTan') sg.SetOptions(text_justification='right') layout = [[ sg.Text('Machine Learning Command Line Parameters', font=('Helvetica', 16)) ], [ sg.Text('Passes', size=(15, 1)), sg.Spin(values=[i for i in range(1, 1000)], initial_value=20, size=(6, 1)), sg.Text('Steps', size=(18, 1)), sg.Spin(values=[i for i in range(1, 1000)], initial_value=20, size=(6, 1)) ], [ sg.Text('ooa', size=(15, 1)), sg.In(default_text='6', size=(10, 1)), sg.Text('nn', size=(15, 1)), sg.In(default_text='10', size=(10, 1)) ], [ sg.Text('q', size=(15, 1)), sg.In(default_text='ff', size=(10, 1)), sg.Text('ngram', size=(15, 1)), sg.In(default_text='5', size=(10, 1)) ], [ sg.Text('l', size=(15, 1)), sg.In(default_text='0.4', size=(10, 1)), sg.Text('Layers', size=(15, 1)), sg.Drop(values=('BatchNorm', 'other'), auto_size_text=True) ], [sg.Text('_' * 100, size=(65, 1))], [sg.Text('Flags', font=('Helvetica', 15), justification='left')], [ sg.Checkbox('Normalize', size=(12, 1), default=True), sg.Checkbox('Verbose', size=(20, 1)) ], [ sg.Checkbox('Cluster', size=(12, 1)), sg.Checkbox('Flush Output', size=(20, 1), default=True) ], [ sg.Checkbox('Write Results', size=(12, 1)), sg.Checkbox('Keep Intermediate Data', size=(20, 1)) ], [sg.Text('_' * 100, size=(65, 1))], [ sg.Text('Loss Functions', font=('Helvetica', 15), justification='left') ], [ sg.Radio('Cross-Entropy', 'loss', size=(12, 1)), sg.Radio('Logistic', 'loss', default=True, size=(12, 1)) ], [ sg.Radio('Hinge', 'loss', size=(12, 1)), sg.Radio('Huber', 'loss', size=(12, 1)) ], [ sg.Radio('Kullerback', 'loss', size=(12, 1)), sg.Radio('MAE(L1)', 'loss', size=(12, 1)) ], [ sg.Radio('MSE(L2)', 'loss', size=(12, 1)), sg.Radio('MB(L0)', 'loss', size=(12, 1)) ], [sg.Submit(), sg.Cancel()]] window = sg.Window('Machine Learning Front End', layout, font=("Helvetica", 12)) event, values = window.read()
def __init__(self, controlador): sg.ChangeLookAndFeel('Reddit') super().__init__(controlador, nome_tela='Formas de pagamento')
return str(random.choice(random_list)) def disableControls(window): window["Quit"].Update(disabled=True) window["OK"].Update(disabled=True) window["input"].Update(disabled=True) def enableControls(window): window["Quit"].Update(disabled=False) window["OK"].Update(disabled=False) window["input"].Update(disabled=False) gui.ChangeLookAndFeel('Black') layout = [[gui.Text('SHOPPING LIST!!!')], [ gui.Text(' ', key='box0', size=(7, 1), pad=(1, 10)), gui.Text(' ', key='box10', size=(7, 1), pad=(1, 10)), gui.Text(' ', key='box20', size=(7, 1), pad=(1, 10)), gui.Text(' ', key='box30', size=(7, 1), pad=(1, 10)), gui.Text(' ', key='box40', size=(7, 1), pad=(1, 10)), gui.Text(' ', key='box50', size=(7, 1), pad=(1, 10)), gui.Text(' ', key='box60', size=(7, 1), pad=(1, 10)), gui.Text(' ', key='box70', size=(7, 1), pad=(1, 10)), gui.Text(' ', key='box80', size=(7, 1), pad=(1, 10)), gui.Text(' ', key='box90', size=(7, 1), pad=(1, 10)) ], [
''' A minimalist Notepad built with the PySimpleGUI TKinter framework Author: Israel Dryer Email: [email protected] Modified: 2019-10-13 ''' import PySimpleGUI as sg sg.ChangeLookAndFeel('BrownBlue') # change style WIN_W: int = 90 WIN_H: int = 25 filename: str = None # string variables to shorten loop and menu code file_new: str = 'New............(CTRL+N)' file_open: str = 'Open..........(CTRL+O)' file_save: str = 'Save............(CTRL+S)' menu_layout: list = [[ 'File', [file_new, file_open, file_save, 'Save As', '---', 'Exit'] ], ['Tools', ['Word Count']], ['Help', ['About']]] layout: list = [[sg.Menu(menu_layout)], [ sg.Text('> New file <', font=('Consolas', 10), size=(WIN_W, 1), key='_INFO_') ], [ sg.Multiline(font=('Consolas', 12),
import os import sys if sys.version_info[0] >= 3: import PySimpleGUI as sg else: import PySimpleGUI27 as sg ''' A chat window. Add call to your send-routine, print the response and you're done To see this program RUN on the web go here: https://repl.it/@PySimpleGUI/Chat-Application-Demo Note that the size of the display on repl.it is smaller than most, so the sizes of the Note that the size of the display on reply. it is smaller than most, so the sizes of the Multiline and Output text areas were reduced in the online version. Nothing else was changed ''' sg.ChangeLookAndFeel('GreenTan') # give our window a spiffy set of colors layout = [[sg.Text('Your output will go here', size=(40, 1))], [sg.Output(size=(127, 30), font=('Helvetica 10'))], [ sg.Multiline(size=(85, 5), enter_submits=True, key='query'), sg.Button('SEND', button_color=(sg.YELLOWS[0], sg.BLUES[0]), bind_return_key=True), sg.Button('EXIT', button_color=(sg.YELLOWS[0], sg.GREENS[0])) ]] window = sg.Window('Chat window', default_element_size=(30, 2), font=('Helvetica', ' 14'), default_button_element_size=(8, 2)).Layout(layout) # ---===--- Loop taking in user input and using it --- #
import PySimpleGUI as gui from subprocess import Popen import os gui.ChangeLookAndFeel("BlueMono") layout = [[gui.Text("Welcome To Revision Helper",size=(50,2))], [gui.Button("Notes",button_color=('white','blue')), gui.Button("Flash Cards",button_color=('white','blue')), gui.Button("Exit",button_color=('white','red'))]] window = gui.Window("Revision Helper",layout=layout,resizable=False) window.read(timeout=1) while True: event, values = window.read() if event in (None,"Exit"): break elif event in ("Notes"): if os.path.exists("Notes.pyw"): Popen("python Notes.pyw") elif os.path.exists("Notes.exe"): Popen("Notes.exe") elif event in ("Flash Cards"): if os.path.exists("Notes.pyw"): Popen("python Cards.pyw") elif os.path.exists("Notes.exe"): Popen("Cards.exe") window.close()
def main(): config = cfg.get_configuration() chase_scraper = ChaseScraperWrapper(config) sheet_uploader = SheetUploader(config) sw = splitwise.init(config) background_worker = BackgroundWorker() now = dt.datetime.now() first_day_of_this_month = dt.datetime(now.year, now.month, 1) date_to = first_day_of_this_month - dt.timedelta(days=1) date_from = dt.datetime(date_to.year, date_to.month, 1) sg.SetOptions(font=FONT_TEXT) # ------ Date Range Definition ------ # sg.theme('DarkTeal7') date_range_frame = sg.Frame( "", relief=sg.RELIEF_FLAT, element_justification='left', layout=[[ sg.Button(" << ", key=KEY_MONTH_PREV), sg.Text("From:"), sg.InputText(key=KEY_DATES_FROM, size=(10, 1), justification='center', default_text=date_from.strftime(FORMAT_DATE)), sg.CalendarButton("Pick", target=KEY_DATES_FROM, format=FORMAT_DATE), sg.Text("", size=(3, 1)), sg.Text("To:"), sg.InputText(key=KEY_DATES_TO, size=(10, 1), justification='center', default_text=date_to.strftime(FORMAT_DATE)), sg.CalendarButton("Pick", target=KEY_DATES_TO, format=FORMAT_DATE), sg.Button(" >> ", key=KEY_MONTH_NEXT) ]]) # ------ Chase Frame Definition ------ # sg.theme('DarkBlue15') chase_logon_frame = sg.Frame( "Logon", font=FONT_GROUP, relief=sg.RELIEF_RIDGE, layout=[[ sg.Text("Login: "******"Password: "******"account_{account}-key" chase_accounts_frame = sg.Frame( "Accounts", font=FONT_GROUP, relief=sg.RELIEF_RIDGE, layout=[[sg.Checkbox(account, key=account_key(key), default=True)] for key, account in config.chase_accounts.items()]) chase_frame = sg.Frame( "Chase", font=FONT_TITLE, relief=sg.RELIEF_FLAT, layout=[[chase_logon_frame], [ chase_accounts_frame, sg.Column( [[sg.Text('')], [sg.Button("Sign In", key=KEY_SIGNIN, size=(20, 1))], [ sg.Button('Download Statements', key=KEY_RUN, size=(20, 1)) ], [ sg.Button('Export to Sheets', key=KEY_PUSH, size=(20, 1)) ]]) ], [sg.Button("Chase -> Sheets", size=(40, 1), key=KEY_RUN_ALL)]]) # ------ Google Sheets Frame Definition ------ # sg.ChangeLookAndFeel('DarkAmber') gsheets_frame = sg.Frame( "Sheets - Splitwise", font=FONT_TITLE, relief=sg.RELIEF_FLAT, layout=[ [ sg.InputOptionMenu(values=get_sheet_tabs(sheet_uploader), key=KEY_SHEET_TABS, text_color='black'), sg.Button("Refresh", key=KEY_SHEET_REFRESH) ], [ sg.Multiline(size=(30, 10), font=FONT_TEXT2, key=KEY_SHEET_CONTENT) ], [ sg.Button( f"Upload to {sw.getGroup(config.splitwise_group_id).name}", size=(30, 1), key=KEY_SPLITWISE_PUSH) ] ]) # ------ XPath Frame Definition ------ # # sg.ChangeLookAndFeel('DarkAmber') # xpath_frame = sg.Frame("XPath Tester", font=FONT_GROUP, relief=sg.RELIEF_FLAT, layout= # [ # [sg.T("XPATH:"), sg.In(key="XPATH")], # [sg.Button(button_text="Go", key='XP_FIND'), sg.Button(button_text="Click", key='XP_CLICK')] # ]) layout = [ [date_range_frame], [chase_frame, sg.VerticalSeparator(), gsheets_frame], #[chase_frame, sg.VerticalSeparator(), sg.Column([[gsheets_frame], [xpath_frame]])], # [sg.Text("", size=(45, 1)), sg.Button('Exit')] ] window = sg.Window("Chazeets", layout, keep_on_top=True, element_justification='center') curr_tab = SELECT_STR while True: event, values = window.read(timeout=100) if event == '__TIMEOUT__': if values[KEY_SHEET_TABS] != curr_tab: curr_tab = values[KEY_SHEET_TABS] if curr_tab == SELECT_STR: window[KEY_SHEET_CONTENT].update(value="") else: expenses = '\n'.join( [str(e) for e in sheet_uploader.pull_totals(curr_tab)]) window[KEY_SHEET_CONTENT].update(value=expenses) continue if event in (None, 'Exit'): break if event == KEY_MONTH_PREV: curr_df = dt.datetime.strptime(values[KEY_DATES_FROM], FORMAT_DATE) first_day_of_curr_month = dt.datetime(curr_df.year, curr_df.month, 1) date_to = first_day_of_curr_month - dt.timedelta(days=1) date_from = dt.datetime(date_to.year, date_to.month, 1) window[KEY_DATES_FROM].update( value=date_from.strftime(FORMAT_DATE)) window[KEY_DATES_TO].update(value=date_to.strftime(FORMAT_DATE)) if event == KEY_MONTH_NEXT: curr_df = dt.datetime.strptime(values[KEY_DATES_TO], FORMAT_DATE) + dt.timedelta(days=1) date_from = dt.datetime(curr_df.year, curr_df.month, 1) date_to = date_from + dt.timedelta(days=32) date_to = dt.datetime(date_to.year, date_to.month, 1) - dt.timedelta(days=1) window[KEY_DATES_FROM].update( value=date_from.strftime(FORMAT_DATE)) window[KEY_DATES_TO].update(value=date_to.strftime(FORMAT_DATE)) if event == KEY_SIGNIN: login(background_worker, chase_scraper, values[KEY_CHASE_USERNAME], values[KEY_CHASE_PASSWORD]) if event == KEY_RUN: selected_accounts = [ config.chase_accounts[account] for account in config.chase_accounts if values[account_key(account)] ] get_statements(background_worker, chase_scraper, selected_accounts, values[KEY_DATES_FROM], values[KEY_DATES_TO]) if event == KEY_PUSH: upload_to_sheets(background_worker, sheet_uploader, values[KEY_DATES_FROM], values[KEY_DATES_TO]) if event == KEY_RUN_ALL: login(background_worker, chase_scraper, values[KEY_CHASE_USERNAME], values[KEY_CHASE_PASSWORD]) selected_accounts = [ config.chase_accounts[account] for account in config.chase_accounts if values[account_key(account)] ] get_statements(background_worker, chase_scraper, selected_accounts, values[KEY_DATES_FROM], values[KEY_DATES_TO]) upload_to_sheets(background_worker, sheet_uploader, values[KEY_DATES_FROM], values[KEY_DATES_TO]) if event == KEY_SHEET_REFRESH: sheet_uploader.api.refresh() window[KEY_SHEET_TABS].update( values=get_sheet_tabs(sheet_uploader)) if event == KEY_SPLITWISE_PUSH: for e in sheet_uploader.pull_totals(curr_tab): splitwise.share_expense_with_group_members( sw, f"{curr_tab} - {e.item}", e.total, config.splitwise_group_id, date_to) if event in ("XP_FIND", "XP_CLICK"): elt = chase_scraper.scraper._find_by_xpath(values['XPATH'], 1) print(elt) if event == "XP_CLICK": elt.click() window.close() chase_scraper.close(0)
import PySimpleGUI as sg sg.ChangeLookAndFeel("Dark") # MUDAR TEMA WIN_W = 90 WIN_H = 25 filename = None file_new = "Novo (CTRL+N)" file_open = "Abrir (CTRL+O)" file_save = "Salvar (CTRL+S)" sg.Text() menu_layout = ( [ "Arquivo", [file_new, file_open, file_save, "Salvar como", "---", "Sair"] ], ["Editar", ["Tornar caixa alta", "Tornar caixa baixa"]], ["Ajuda", ["Como criar minhhas próprias interfaces?", "Autores"]], ) layout = [ [sg.MenuBar(menu_layout)], [ sg.Multiline(font=("Consolas", 12), text_color="white", size=(WIN_W, WIN_H), key="_BODY_") ], ]
def main(): sg.ChangeLookAndFeel('SystemDefault') # ------ Layout ------ # column1 = sg.Column([[sg.Button("Clean", key="btnClean")], [sg.Button("Prove", key="btnProve")], [sg.Button("Exit", key="btnExit")]]) layout = [ [sg.Text("Statements")], [ sg.Multiline("", key='txtInput', size=(75, 5), enable_events=True, justification='left', font=("Helvetica", 8), text_color='blue', tooltip='Input Statements'), column1 ], [sg.Text("Result")], [ sg.Multiline("", key='txtOutput', size=(85, 10), justification='left', font=("Helvetica", 8), text_color='blue', tooltip='Result') ], ] # Create the window window = sg.Window("Theorem Prover", layout, finalize=True, grab_anywhere=False, return_keyboard_events=True, use_default_focus=False, location=(150, 150)) # set initial values window['txtOutput'].update(thp.help()) window['txtInput'].update( 'axiom P implies Q\naxiom Q implies R\naxiom P\nlemma R') # ---===--- Loop taking in user input --- # while True: event, value = window.read() # End program if user closes window or press Exit button if event == 'Exit' or event == "btnExit" or event == sg.WIN_CLOSED: print(event, "exiting") break if event == 'btnClean': window['txtOutput'].update("") window['txtInput'].update('') if event == 'btnProve': try: textInput = value['txtInput'] statement = textInput.splitlines() print(statement) # statement=textInput.split(",") # statement=re.split("^\S",textInput) # statement = ' '.join(statement).split() # remove empty strings from list output, proof = thp.prove(statement) print("proof", proof) s = "\nProof:\n" for p in proof: s = s + p + "\n" window['txtOutput'].update(output + s) except Exception as e: print('Error=', e) # for debugging event and value # print('event= {}'.format(event)) # print('element= {}'.format(value)) window.close()