def init_model(larva_model, collapsibles={}): for name, dict, kwargs in zip(['PHYSICS', 'ENERGETICS', 'BODY', 'ODOR'], [larva_model['sensorimotor_params'], larva_model['energetics_params'], larva_model['body_params'], larva_model['odor_params']], [{}, {'toggle': True, 'disabled': True}, {}, {}]): collapsibles[name] = CollapsibleDict(name, True, dict=dict, type_dict=None, **kwargs) module_conf = [] for k, v in larva_model['neural_params']['modules'].items(): dic = larva_model['neural_params'][f'{k}_params'] if k == 'olfactor': # odor_gains=dic['odor_dict'] dic.pop('odor_dict') s = CollapsibleDict(k.upper(), False, dict=dic, dict_name=k.upper(), toggle=v) collapsibles.update(s.get_subdicts()) module_conf.append(s.get_section()) odor_gain_conf = [sg.Button('ODOR GAINS', **buttonM_kwargs)] # odor_gain_conf = [sg.Text('odor gains:', **text_kwargs), sg.Button('Odor gains', **button_kwargs)] module_conf.append(odor_gain_conf) collapsibles['BRAIN'] = Collapsible('BRAIN', True, module_conf) brain_layout = sg.Col([collapsibles['BRAIN'].get_section()]) non_brain_layout = sg.Col([collapsibles['PHYSICS'].get_section(), collapsibles['BODY'].get_section(), collapsibles['ENERGETICS'].get_section(), collapsibles['ODOR'].get_section() ]) model_layout = [[brain_layout, non_brain_layout]] collapsibles['MODEL'] = Collapsible('MODEL', False, model_layout) return collapsibles['MODEL'].get_section()
def title_bar(title, text_color, background_color): """ Creates a "row" that can be added to a layout. This row looks like a titlebar :param title: The "title" to show in the titlebar :type title: str :return: A list of elements (i.e. a "row" for a layout) :type: List[sg.Element] """ bc = background_color tc = text_color return [ sg.Col([[sg.T(title, text_color=tc, background_color=bc)]], pad=(0, 0), background_color=bc), sg.Col([[ sg.T('_', text_color=tc, background_color=bc, enable_events=True, key='-MINIMIZE-'), sg.Text('❎', text_color=tc, background_color=bc, enable_events=True, key='Exit') ]], element_justification='r', key='-TITLEBAR-', pad=(0, 0), background_color=bc) ]
def __init__(self): self.UI_col = [ [sg.Button("Generate points")], [sg.Button("Draw baseline")], [sg.Button("Plot exp")], [sg.Text("c0"), sg.Input("N/A", readonly=True, key="-c0-")], [sg.Text("c1"), sg.Input("N/A", readonly=True, key="-c1-")], ] self.gradient_desc_col = [[ sg.Canvas(key="-GRAD_DESC-", size=(500, 400)) ]] self.lin_plot_col = [[sg.Canvas(key="-LINE_PLOT-", size=(500, 400))]] self.layout = [[ sg.Col(self.UI_col), sg.VerticalSeparator(), sg.Col(self.gradient_desc_col), sg.VerticalSeparator(), sg.Col(self.lin_plot_col), ]] self.window = sg.Window("Linear Regression", self.layout, finalize=True)
def make_window(): """ Creates the main window :return: The main window object :rtype: (Window) """ theme = get_theme() if not theme: theme = sg.OFFICIAL_PYSIMPLEGUI_THEME sg.theme(theme) # First the window layout...2 columns find_tooltip = "Find in file\nEnter a string in box to search for string inside of the files.\nFile list will update with list of files string found inside." filter_tooltip = "Filter files\nEnter a string in box to narrow down the list of files.\nFile list will update with list of files with string in filename." find_re_tooltip = "Find in file using Regular Expression\nEnter a string in box to search for string inside of the files.\nSearch is performed after clicking the FindRE button." left_col = sg.Col([ [sg.Listbox(values=get_file_list(), select_mode=sg.SELECT_MODE_EXTENDED, size=(50, 20), key='-DEMO LIST-')], [sg.Text('Filter:', tooltip=filter_tooltip), sg.Input(size=(25, 1), enable_events=True, key='-FILTER-', tooltip=filter_tooltip), sg.T(size=(15,1), k='-FILTER NUMBER-')], [sg.Button('Run'), sg.B('Edit'), sg.B('Clear'), sg.B('Open Folder')], [sg.Text('Find:', tooltip=find_tooltip), sg.Input(size=(25, 1), enable_events=True, key='-FIND-', tooltip=find_tooltip), sg.T(size=(15,1), k='-FIND NUMBER-')], ], element_justification='l') lef_col_find_re = sg.pin(sg.Col([ [sg.Text('Find:', tooltip=find_re_tooltip), sg.Input(size=(25, 1),key='-FIND RE-', tooltip=find_re_tooltip),sg.B('Find RE')]], k='-RE COL-')) right_col = [ [sg.Multiline(size=(70, 21), write_only=True, key=ML_KEY, reroute_stdout=True, echo_stdout_stderr=True)], [sg.Button('Edit Me (this program)'), sg.B('Settings'), sg.Button('Exit')], [sg.T('PySimpleGUI ver ' + sg.version.split(' ')[0] + ' tkinter ver ' + sg.tclversion_detailed, font='Default 8', pad=(0,0))], ] options_at_bottom = sg.pin(sg.Column([[sg.CB('Verbose', enable_events=True, k='-VERBOSE-'), sg.CB('Show only first match in file', default=True, enable_events=True, k='-FIRST MATCH ONLY-'), sg.CB('Find ignore case', default=True, enable_events=True, k='-IGNORE CASE-')]], pad=(0,0), k='-OPTIONS BOTTOM-')) choose_folder_at_top = sg.pin(sg.Column([[sg.T('Click settings to set top of your tree or choose a previously chosen folder'), sg.Combo(sorted(sg.user_settings_get_entry('-folder names-', [])), default_value=sg.user_settings_get_entry('-demos folder-', ''), size=(50, 1), key='-FOLDERNAME-', enable_events=True, readonly=True)]], pad=(0,0), k='-FOLDER CHOOSE-')) # ----- Full layout ----- layout = [[sg.Text('PySimpleGUI Demo Program & Project Browser', font='Any 20')], [choose_folder_at_top], sg.vtop([sg.Column([[left_col],[ lef_col_find_re]], element_justification='l'), sg.Col(right_col, element_justification='c') ]), [options_at_bottom] ] # --------------------------------- Create Window --------------------------------- window = sg.Window('PSG Demo & Project Browser', layout, finalize=True, icon=icon) if not advanced_mode(): window['-FOLDER CHOOSE-'].update(visible=False) window['-RE COL-'].update(visible=False) window['-OPTIONS BOTTOM-'].update(visible=False) sg.cprint_set_output_destination(window, ML_KEY) return window
def build_batch_tab(collapsibles): batch = copy.deepcopy(test_batch) space_search = batch['space_search'] l_exp = [sg.Col([ named_list_layout(text='Batch:', key='BATCH_CONF', choices=list(loadConfDict('Batch').keys())), [sg.Button('Load', key='LOAD_BATCH', **button_kwargs), sg.Button('Save', key='SAVE_BATCH', **button_kwargs), sg.Button('Delete', key='DELETE_BATCH', **button_kwargs), sg.Button('Run', key='RUN_BATCH', **button_kwargs)] ])] batch_conf = [[sg.Text('Batch id:', **text_kwargs), sg.In('unnamed_batch_0', key='batch_id', **text_kwargs)], [sg.Text('Path:', **text_kwargs), sg.In('unnamed_batch', key='batch_path', **text_kwargs)], # [sg.Text('Duration (min):', **text_kwargs), sg.In(3, key='batch_dur', **text_kwargs)], # [sg.Text('Timestep (sec):', **text_kwargs), sg.In(0.1, key='dt', **text_kwargs)], # collapsibles['OUTPUT'].get_section() ] collapsibles['BATCH_CONFIGURATION'] = Collapsible('BATCH_CONFIGURATION', True, batch_conf) l_conf = collapsibles['BATCH_CONFIGURATION'].get_section() l_batch0 = [[sg.Col([l_exp, l_conf, [sg.Button('SPACE_SEARCH', **buttonM_kwargs)]])]] l_batch1 = [init_batch(batch, collapsibles)] l_batch = [[sg.Col(l_batch0), sg.Col(l_batch1)]] return l_batch, collapsibles, space_search
def createLayout(left_column, right_column): layout = [ [sg.Col(left_column,size=(300, 200), scrollable=True, vertical_scroll_only=True), sg.Col(right_column)] ] return layout
def title_bar(title): """ Creates a "row" that can be added to a layout. This row looks like a titlebar :param title: The "title" to show in the titlebar :type title: str :return: A list of elements (i.e. a "row" for a layout) :type: List[sg.Element] """ bg = sg.theme_input_background_color() return [ sg.Col([[sg.T(title, background_color=bg)]], pad=(0, 0), background_color=bg), sg.Col([[ sg.T( '_', background_color=bg, enable_events=True, key='-MINIMIZE-'), sg.Text('❎', background_color=bg, enable_events=True, key='Exit') ]], element_justification='r', k='-C-', pad=(0, 0), background_color=bg) ]
def player_war_window(data: Dict, best_32: List[int], stats: Dict) -> sg.Window: """Player war window. Args: data (Dict): Dictionary with player information. best_32 (List): List with best 32 stats levels. stats (Dict): Dictionary with war stats. """ winrate = RoyaleApi.get_winrate(data["losses"], data["wins"]) / 100.0 base_fp = sum(best_32) est_fp = int(winrate * (2 * base_fp) + (1 - winrate) * base_fp) decks = [ [sg.T(f"Average level: {st.mean(best_32):.2f}")], [sg.T(f"Minimum daily WP: {base_fp}")], [sg.T(f"Maximum daily WP: {2 * base_fp}")], [sg.T(f"Estimated daily WP: {est_fp}")], [sg.HSep()], [sg.T(f"Minimum war WP: {7 * base_fp}")], [sg.T(f"Maximum war WP: {14 * base_fp}")], [sg.T(f"Estimated war WP: {7 * est_fp}")], ] war_stats = [ [sg.T(f"Total WP: {sum(stats['war_points']):.0f}")], [sg.T(f" \u21B3 FP: {sum(stats['fame_points']):.0f}")], [sg.T(f" \u21B3 RP: {sum(stats['repair_points']):.0f}")], [ sg. T(f"Average WP: {sum(stats['war_points']) / len(stats['war_points'])}" ) ], ] current_war = [ [sg.T(f"Current WP: {stats['current_war_points']}")], [sg.T(f" \u21B3 FP: {stats['current_fame_points']}")], [sg.T(f" \u21B3 RP: {stats['current_repair_points']}")], ] h = "WP: War Points\nFP: Fame Points\nRP: Repair Points" layout = [ [ sg.Col([ [ cw.F("Best 32 cards", decks), sg.Col([ [cw.F("War stats", war_stats)], [cw.F("Current war", current_war)], ]), ], ]) ], [sg.B("\u2190"), sg.HSep(), sg.T("[?]", tooltip=h)], ] return sg.Window(TITLE, layout)
def build_analysis_tab(): fig, save_to, save_as, figure_agg = None, '', '', None func, func_kwargs = None, {} data = {} data_list = [ [sg.Text('DATASETS', **header_kwargs)], [sg.Listbox(values=[], change_submits=False, size=(20, len(data.keys())), key='DATASET_IDS', enable_events=True)], [sg.FolderBrowse(button_text='Add', initial_folder=SingleRunFolder, key='DATASET_DIR', change_submits=True, enable_events=True, **button_kwargs)], [sg.Button('Remove', **button_kwargs), sg.Button('Add ref', **button_kwargs), sg.Button('Change ID', **button_kwargs)], # [sg.Text(' ' * 12)] ] dim = 2000 figure_w, figure_h = dim, dim graph_dict = { 'crawl_pars': plot_crawl_pars, 'angular_pars': plot_ang_pars, 'endpoint_params': plot_endpoint_params, 'stride_Dbend': plot_stride_Dbend, 'stride_Dorient': plot_stride_Dorient, 'interference': plot_interference, 'dispersion': plot_dispersion, 'stridesNpauses': plot_stridesNpauses, 'turn_duration': plot_turn_duration, 'turns': plot_turns, 'odor_concentration': plot_odor_concentration, 'sensed_odor_concentration': plot_sensed_odor_concentration, 'pathlength': plot_pathlength, 'food_amount': plot_food_amount, 'gut': plot_gut, 'barplot': barplot, 'deb': plot_debs, } graph_list = [ [sg.Text('GRAPHS', **header_kwargs)], [sg.Listbox(values=list(graph_dict), change_submits=True, size=(20, len(list(graph_dict))), key='GRAPH_LIST')], [sg.Button('Graph args', **button_kwargs), sg.Button('Draw', **button_kwargs), sg.Button('Save', **button_kwargs)]] graph_code = sg.Col([[sg.MLine(size=(70, 30), key='GRAPH_CODE')]]) graph_canvas = sg.Col([[sg.Canvas(size=(figure_w, figure_h), key='GRAPH_CANVAS')]]) graph_instructions = sg.Col([[sg.Pane([graph_canvas, graph_code], size=(figure_w, figure_h))], [sg.Text('Grab square above and slide upwards to view source code for graph')]]) analysis_layout = [ [sg.Col(data_list)], [sg.Col(graph_list), graph_instructions] ] return analysis_layout, graph_dict, data, func, func_kwargs, fig, save_to, save_as, figure_agg
def create_img_win(): img_col_l = [[sg.Text('Share A')], [sg.Image(key='-SHARE_A-')], [sg.Text('Share B')], [sg.Image(key='-SHARE_B-')]] img_col_r = [[sg.Text('Share A+B'), sg.Image(key='-SHARE_AB-')]] img_layout = [ [sg.Col(img_col_l), sg.VerticalSeparator(), sg.Col(img_col_r)], [sg.HorizontalSeparator(pad=None)], ] win = sg.Window('Images', img_layout) return win
def get_boss(self, raid_name): column = [] saved_key = [] id_zone = zone_info[raid_name] raid = self.Zones[id_zone - 3]['encounters'] for encounter in raid: raid_info[encounter['name']] = encounter['id'] column.append([sg.CB(encounter['name'])]) boss_list.append(encounter['name']) layout = [[sg.Text('Choose a boss')], [sg.Col(column)], [sg.Button('Select'), sg.Exit()]] window = sg.Window('All bosses', layout) while True: event, values = window.Read() if event is None or event == 'Exit': break elif event == 'Select': for key in values: if values[key]: saved_key = key break window.Close() print(boss_list[saved_key]) return boss_list[saved_key]
def get_zone(self): column = [] saved_key = [] for zone in self.Zones: zone_info[zone['name']] = zone['id'] zone_list.append(zone['name']) column.append([sg.CB(zone['name'])]) layout = [[sg.Text('Choose a zone')], [sg.Col(column)], [sg.Button('Select'), sg.Exit()]] window = sg.Window('All zones', layout) while True: event, values = window.Read() if event is None or event == 'Exit': break elif event == 'Select': for key in values: if values[key]: saved_key = key break window.Close() print(zone_list[saved_key]) return zone_list[saved_key]
def create_window(): """ Defines the window's layout and creates the window object. This function is used so that the window's theme can be changed and the window "re-started". :return: The Window object :rtype: sg.Window """ left_col = [[sg.T('Figures to Draw')], [ sg.Listbox(list(dictionary_of_figures), default_values=[list(dictionary_of_figures)[0]], size=(15, 5), key='-LB-') ], [sg.T('Matplotlib Styles')], [sg.Combo(plt.style.available, size=(15, 10), key='-STYLE-')], [sg.T('PySimpleGUI Themes')], [ sg.Combo(sg.theme_list(), default_value=sg.theme(), size=(15, 10), key='-THEME-') ]] layout = [[sg.T('Matplotlib Example', font='Any 20')], [sg.Col(left_col), sg.Image(key='-IMAGE-')], [sg.B('Draw'), sg.B('Exit')]] window = sg.Window('Matplotlib Embedded Template', layout, finalize=True) return window
def main_window(): layout = \ [ # text title [sg.Text('wikipedia', justification='center', font=('Helvetica', '16'))], # Multiline the Output details [sg.ML("", size=(40, 100), key='-text_ml1-', disabled=False), sg.Col( [ # Label [sg.Text('Search', background_color=sg.DEFAULT_BACKGROUND_COLOR, size=(10, 1))], # Input for search [sg.In(key="-input1-", text_color="grey20")], # Button Submit and exit [sg.Submit('OK'), sg.Exit()], # List Boxs for ==> like Did you mean these are wholesale [sg.Listbox([], size=(20, 50), key='-listbox1-', no_scrollbar=True)] ] )], ] # window main window = sg.Window('wikipedia', layout=layout, font=('Helvetica', '13'), size=(700, 700)) return window
def layoutBuilder(newGrid, meshInput): gridFrame = gridBuilder(newGrid) col1 = [[sg.Text('1. Enter mesh')], [ sg.Multiline(meshInput, size=(60, 40), key='-IN-', enter_submits=True) ], [sg.Button('Submit')]] col2 = [[sg.Text('2. Edit mesh')], [sg.Frame('', gridFrame, key='-GRID-')], [sg.Button('Export')]] col3 = [[sg.Text('Output commands', size=(60, 1))], [sg.Multiline('', size=(60, 40), key='-OUT-', do_not_clear=True)]] layout = [[sg.Col(col1), sg.Col(col2), sg.Col(col3)]] return layout
def package_row(item_num, tracking_num=''): carrier_list = ('FedEx', 'USPS') tracking_numbers = sg.user_settings_get_entry('-packages-', []) row = [ sg.pin( sg.Col( [[ sg.B(sg.SYMBOL_X, border_width=0, button_color=(sg.theme_text_color(), sg.theme_background_color()), k=('-DEL-', item_num), tooltip='Delete this item'), sg.Combo(tracking_numbers, default_value=tracking_num, size=(20, 1), key=('-ID-', item_num)), sg.In(size=(20, 1), k=('-DESC-', item_num)), # sg.Input(default_text=tracking_num, s=(20,1), key=('-ID-', item_num), tooltip='Enter your package ID'), sg.Combo(carrier_list, default_value=carrier_list[0], readonly=True, s=(10, 10), k=('-CARRIER-', item_num), tooltip='Not implemented'), sg.T(size=(15, 1), k=('-STATUS-', item_num)) ]], k=('-ROW-', item_num))) ] return row
def title_bar(title, text_color, background_color): """ Creates a "row" that can be added to a layout. This row looks like a titlebar :param title: The "title" to show in the titlebar :type title: str :param text_color: Text color for titlebar :type text_color: str :param background_color: Background color for titlebar :type background_color: str :return: A list of elements (i.e. a "row" for a layout) :rtype: List[sg.Element] """ bc = background_color tc = text_color font = 'Helvetica 12' return [ sg.Col([[ sg.T(title, text_color=tc, background_color=bc, font=font, grab=True) ]], pad=(0, 0), background_color=bc), sg.Col([[ sg.T('_', text_color=tc, background_color=bc, enable_events=True, font=font, key='-MINIMIZE-'), sg.Text('❎', text_color=tc, background_color=bc, font=font, enable_events=True, key='Exit') ]], element_justification='r', key='-C-', expand_x=True, grab=True, pad=(0, 0), background_color=bc) ]
def ZhuMain(): fig_dict = { '进度条1': Pb1, '进度条2': Pb2, '进度条3': Pb3, '进度条4': Pb4, '进度条5': Pb5, '进度条6': Pb6, '进度条7': Pb7, '进度条8': Pb8, '进度条9': Pb9, '进度条10': Pb10, '进度条11': Pb11, '进度条12': Pb12, '进度条13': Pb13 } sg.theme('LightGreen') #主题背景设计,默认银河灰 # define the form layout listbox_values = list(fig_dict) col_listbox = [[ sg.Listbox(values=listbox_values, enable_events=True, size=(28, len(listbox_values)), key='-LISTBOX-') ], [sg.Text('★' * 15)], [sg.Exit(size=(5, 2))]] #布局 layout = [ [sg.Text('最全进度条及代码整理', font=('current 10'))], [ sg.Col(col_listbox, pad=(5, (3, 330))), sg.MLine(size=(50, 30), pad=(5, (3, 90)), key='-MULTILINE-') ], #第2行有3个布局 ] # create the form and show it without the plot window = sg.Window('Python3下的最全的进度条整理', layout, grab_anywhere=False, finalize=True) # The GUI Event Loop while True: event, values = window.read() # helps greatly when debugging if event in (None, 'Exit'): # if user closed window or clicked Exit button break choice = values['-LISTBOX-'][ 0] # get first listbox item chosen (returned as a list) func = fig_dict[choice] # get function to call from the dictionary window['-MULTILINE-'].update(inspect.getsource( func)) # show source code to function in multiline window.close()
def FieldColumn(name, key, value=''): """Generate a column that contains two text fields - label and value """ layout = [[ sg.Text(name, size=(10, 1)), sg.Text(value if value is not None else '', size=(18, 1), key=key) ]] return sg.Col(layout, pad=(0, 0))
def GraphColumn(name, key): layout = [ [sg.Text(name, size=(18,1), font=('Helvetica 8'), key=key+'TXT_')], [sg.Graph((GRAPH_WIDTH, GRAPH_HEIGHT), (0, 0), (GRAPH_WIDTH, 100), background_color='black', key=key+'GRAPH_')]] return sg.Col(layout, pad=(2, 2))
def title_bar(title, text_color, background_color): """ Creates a Column element meant to be used as a single row. This row looks like a titlebar. :param title: The "title" to show in the titlebar :type title: str :return: A single Column element that can be used as a single row in your layout :type: sg.Column """ bc = background_color tc = text_color return sg.Col([[ sg.Col([[ sg.T(title, text_color=tc, background_color=bc, grab=True, expand_x=True) ]], pad=(0, 0), background_color=bc, expand_x=True), sg.Col([[ sg.T('_', text_color=tc, background_color=bc, enable_events=True, key='-MINIMIZE-'), sg.Text('❎', text_color=tc, background_color=bc, enable_events=True, key='Exit') ]], element_justification='r', key='-C-', pad=(0, 0), expand_x=True, background_color=bc, grab=True) ]], pad=(0, 0), grab=True, expand_x=True)
def main(program, customer): arr = [] index = 1 for c in strings: if c.startswith('HEADER '): c = c.replace('HEADER ', '') arr += [[ Gui.Text(c, size=(66, int(len(c) / header_max_symbols)), justification='center', font=("Helvetica", 18), relief=Gui.RELIEF_RIDGE) ], [Gui.Text('-' * 230)]] else: c = c.replace('\\n', '\n') height = int(len(c) / text_max_symbols) height += int(c.count('\n') / 5) arr += [[ Gui.Text(c, size=(100, height), key=f"RADIO{index}-text"), Gui.VerticalSeparator(), Gui.Radio('да', f"RADIO{index}", key=f"RADIO{index}-yes", enable_events=True), Gui.Radio('нет', f"RADIO{index}", key=f"RADIO{index}-no", enable_events=True) ], [Gui.Text('-' * 230)]] index += 1 layout = [[ Gui.Col(arr, size=(950, 780), scrollable=True, vertical_scroll_only=True) ], [Gui.Submit(button_text='Результат', key='Result')], [Gui.Submit(button_text='Назад')]] window = Gui.Window('Документы обязательные для предоставления', layout, grab_anywhere=False, element_justification='c').Finalize() while True: event, values = window.read(timeout=100) if event in (None, 'Exit', 'Cancel', 'Закрыть'): return 0 elif 'RADIO' in str(event): res = event.replace('RADIO', '').split('-') if res[1] == 'yes': window[f"RADIO{res[0]}-text"].update(text_color='#37ff5a') else: window[f"RADIO{res[0]}-text"].update(text_color='#ff4f4f') elif event == 'Назад': window.close() break
def __init__(self, agent, par_shorts=[], available_pars=[]): self.agent = agent self.available_pars = available_pars self.par_shorts = par_shorts self.dt = self.agent.model.dt self.init_dur = 20 self.window_size = (1550, 1200) self.canvas_size = (self.window_size[0] - 50, self.window_size[1] - 50) self.my_dpi = 96 self.figsize = (int(self.canvas_size[0] / self.my_dpi), int(self.canvas_size[1] / self.my_dpi)) Ncols = 4 par_lists = [ list(a) for a in np.array_split(self.available_pars, Ncols) ] par_layout = [[sg.Text('Choose parameters')], [ sg.Col([ *[[sg.CB(p, key=f'k_{p}')] for p in par_lists[i]] ]) for i in range(Ncols) ], [ sg.Button('Ok', **button_kwargs), sg.Button('Cancel', **button_kwargs) ]] graph_layout = [ # [sg.Text(f'{self.agent.unique_id} : {self.par}', size=(40, 1), justification='center', font='Helvetica 20')], [sg.Canvas(size=(1280, 1200), key='-CANVAS-')], [sg.Text('Time in seconds to display on screen')], [ sg.Slider(range=(0.1, 60), default_value=self.init_dur, size=(40, 10), orientation='h', key='-SLIDER-TIME-') ], [sg.Button('Choose', **button_kwargs)] ] layout = [[ sg.Column(par_layout, key='-COL1-'), sg.Column(graph_layout, visible=False, key='-COL2-') ]] self.window = sg.Window(f'{self.agent.unique_id} Dynamic Graph', layout, finalize=True, location=(0, 0), size=self.window_size) self.canvas_elem = self.window.FindElement('-CANVAS-') self.canvas = self.canvas_elem.TKCanvas self.fig_agg = None self.update_pars() self.layout = 1
def build_model_tab(collapsibles): larva_model = copy.deepcopy(test_larva) odor_gains = larva_model['neural_params']['olfactor_params']['odor_dict'] module_dict = larva_model['neural_params']['modules'] module_keys = list(module_dict.keys()) l_mod0 = [sg.Col([ [sg.Text('Larva model:', **header_kwargs), sg.Combo(list(loadConfDict('Model').keys()), key='MODEL_CONF', enable_events=True, readonly=True, **text_kwargs)], [sg.Button('Load', key='LOAD_MODEL', **button_kwargs), sg.Button('Save', key='SAVE_MODEL', **button_kwargs), sg.Button('Delete', key='DELETE_MODEL', **button_kwargs)] ])] l_mod1 = init_model(larva_model, collapsibles) l_mod = [[sg.Col([l_mod0, l_mod1])]] return l_mod, collapsibles, module_keys, odor_gains
def main(): sg.theme('Dark Blue 3') col = [[sg.R('Move Stuff', 1, True, key='-MOVE-', enable_events=True)]] layout = [ [ sg.Graph( canvas_size=(400, 400), graph_bottom_left=(0, 0), graph_top_right=(400, 400), key="-GRAPH-", change_submits=True, # mouse click events background_color='lightblue', drag_submits=True), sg.Col(col) ], [sg.Text(key='info', size=(60, 1))] ] window = sg.Window("Drawing and Moving Stuff Around", layout, finalize=True) # get the graph element for ease of use later graph = window["-GRAPH-"] # type: sg.Graph graph.draw_image(data=logo200, location=(0, 400)) dragging = False start_point = end_point = prior_rect = None graph.bind('<Button-3>', '+RIGHT+') while True: event, values = window.read() if event is None: break # exiti if event == "-GRAPH-": # if there's a "Graph" event, then it's a mouse x, y = values["-GRAPH-"] if not dragging: start_point = (x, y) dragging = True drag_figures = graph.get_figures_at_location((x, y)) lastxy = x, y else: end_point = (x, y) if prior_rect: graph.delete_figure(prior_rect) delta_x, delta_y = x - lastxy[0], y - lastxy[1] lastxy = x, y if None not in (start_point, end_point): if values['-MOVE-']: for fig in drag_figures: graph.move_figure(fig, delta_x, delta_y) graph.update()
def __get__main_win(self): """ Devuelve el layout general para crear la interfaz """ data = self.__get_tasks() col1 = [ [sg.Text('Mis tareas')], [ sg.Table(values=data, key='-TABLE-', auto_size_columns=False, col_widths=self.HEADINGS_WIDTHS, headings=self.HEADINGS, num_rows=10, pad=(20, 20), row_height=30) ], ] col2 = [[sg.Button('Nueva tarea')], [sg.Exit('Salir')]] layout = [[sg.Col(col1, ), sg.Col(col2)]] return sg.Window('UnizarTasks', layout, font=self.FONT)
def main(): with open(CHECKLIST_FILE, 'r+', encoding='utf-8') as t: checklist_file = t.read().strip() checklist = checklist_file[1:-1].split('\'\n\'') arr = [] index = 1 for c in checklist: if c.startswith('HEADER '): c = c.replace('HEADER ', '') arr += [[ Gui.Text(c, size=(66, int(len(c) / header_max_symbols)), justification='center', font=("Helvetica", 18), relief=Gui.RELIEF_RIDGE) ], [Gui.Text('-' * 230)]] else: c = c.replace('\\n', '\n') height = int(len(c) / text_max_symbols) height += int(c.count('\n') / 5) arr += [[ Gui.Text(c, size=(100, height), key=f"RADIO{index}-text"), Gui.VerticalSeparator(), Gui.Radio('да', f"RADIO{index}", key=f"RADIO{index}-yes", enable_events=True), Gui.Radio('нет', f"RADIO{index}", key=f"RADIO{index}-no", enable_events=True) ], [Gui.Text('-' * 230)]] index += 1 layout = [[Gui.Col(arr, size=(950, 950), scrollable=True)], [ Gui.Text('', size=(50, 1)), Gui.Submit(button_text='Результат', key='Result'), Gui.Submit(button_text='Закрыть', key='Cancel') ]] window = Gui.Window('Документы обязательные для предоставления', layout, grab_anywhere=False).Finalize() while True: event, values = window.read(timeout=100) if event in (None, 'Exit', 'Cancel', 'Закрыть'): return 0 elif 'RADIO' in str(event): res = event.replace('RADIO', '').split('-') if res[1] == 'yes': window[f"RADIO{res[0]}-text"].update(text_color='#37ff5a') else: window[f"RADIO{res[0]}-text"].update(text_color='#ff4f4f')
def make_window(location): location = sg.user_settings_get_entry('-location-', location) alpha = sg.user_settings_get_entry('-alpha-', 0.9) layout = [[sg.Text('FedEx Package Tracking', font='_ 15')], [sg.Col([package_row(0)], k='-TRACKING SECTION-')], [sg.pin(sg.Text( size=(35, 1), font='_ 8', k='-REFRESHED-', ))], [ sg.T(sg.SYMBOL_X, enable_events=True, k='Exit', tooltip='Exit Application'), sg.T('↻', enable_events=True, k='Refresh', tooltip='Save Changes & Refresh'), sg.T('+', enable_events=True, k='Add Package', tooltip='Add Another Package') ]] right_click_menu = [[''], [ 'Add Package', 'Edit Me', 'Change Theme', 'Save Location', 'Refresh', 'Alpha', [str(x) for x in range(1, 11)], 'Exit', ]] window = sg.Window('Window Title', layout, finalize=True, no_titlebar=True, grab_anywhere=True, keep_on_top=True, right_click_menu=right_click_menu, alpha_channel=alpha, location=location, use_default_focus=False, font='_ 15', metadata=0) add_packages_to_window(window) return window
def main(data): arr = [] radios = {} index = 1 for c, perm, maybe in eda_docs: if c.startswith('HEADER '): c = c.replace('HEADER ', '') arr += [ [Gui.Text(c, size=(66, int(len(c) / header_max_symbols)), justification='center', font=("Helvetica", 18), relief=Gui.RELIEF_RIDGE)], [Gui.Text('-' * 230)] ] elif data['type'] in perm: c = c.replace('\\n', '\n') height = int(len(c) / text_max_symbols) height += int(c.count('\n') / 5) arr += [ [Gui.Text(c, size=(100, height), key=f"RADIO{index}-text"), Gui.VerticalSeparator(), Gui.Radio('да', f"RADIO{index}", key=f"RADIO{index}-yes", enable_events=True), Gui.Radio('нет', f"RADIO{index}", key=f"RADIO{index}-{'maybe' if maybe else 'no'}", enable_events=True)], [Gui.Text('-' * 230)] ] radios[str(index)] = c index += 1 layout = [ [Gui.Col(arr, size=(950, 780), scrollable=True, vertical_scroll_only=True)], [Gui.Submit(button_text='Далее'), Gui.Submit(button_text='Назад')] ] window = Gui.Window('Документы обязательные для предоставления', layout, grab_anywhere=False, element_justification='c').Finalize() while True: event, values = window.read(timeout=100) if event in (None, 'Exit', 'Cancel', 'Закрыть'): return 0 elif 'RADIO' in str(event): res = event.replace('RADIO', '').split('-') if res[1] == 'yes': window[f"RADIO{res[0]}-text"].update(text_color='#37ff5a') elif res[1] == 'maybe': window[f"RADIO{res[0]}-text"].update(text_color='#ffa500') else: window[f"RADIO{res[0]}-text"].update(text_color='#ff4f4f') elif event == 'Назад': window.close() break elif event == 'Далее': filtered = [filter_key(k) for k, v in values.items() if v is True] data['error_docs'] = [radios[f] for f in filtered if f is not None] window.hide() eda_fou_main(data) window.un_hide()
def GraphColumn(name, key): col = sg.Col([[ 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)) return col