import PySimpleGUI as psg data = list("abcdefg") # ["a", "b", "c", "d", "e", "f", "g"] frame = [[psg.Combo(values=data, size=(10, 4), default_value=data[2])], [psg.HorizontalSeparator()], [psg.CB("체크박스1"), psg.VerticalSeparator(), psg.CB("체크박스2")]] layout = [[psg.Frame("프레임 테스트", frame)], [psg.Ok(), psg.Cancel()]] window = psg.Window("Checkbox 테스트", layout) event, values = window.read() window.close() print(event, values)
key="TEXT_COMBINE", visible=False) ], [ sg.MLine(size=(120, 12), key="RESULT_COMBINE", font="Consolas 10", visible=False) ]]) ] ] column_stakes = [ [sg.Text("Site"), sg.Text("Mises")], [ sg.Combo(sites, key="SITE_STAKES_0"), sg.Input(key="STAKE_STAKES_0", size=(6, 1)) ], *([ sg.Combo(sites, key="SITE_STAKES_" + str(i), visible=False), sg.Input(key="STAKE_STAKES_" + str(i), size=(6, 1), visible=False) ] for i in range(1, 9)), [ sg.Button("Retirer mise", key="REMOVE_STAKES"), sg.Button("Ajouter mise", key="ADD_STAKES") ] ] visible_stakes = 1 column_indicators_stakes = [[ sg.Text("", size=(15, 1), key="INDICATORS_STAKES" + str(_), visible=False) ] for _ in range(5)]
def Iniciar(self): self.produtos = self._venda.mostrarLista() self.totalSomado = '0,00' self.selecionado = [] headings = [ 'COD.', 'NOME PROD.', 'VALOR UNI.', 'QUANTIDADE', 'VALOR TOTAL' ] self.dados = [] table = [[ sg.Table(values=self.dados, headings=headings, def_col_width=23, auto_size_columns=False, max_col_width=23, justification="right", alternating_row_color='#DFB2F4', header_font=('Helvetica', 11), vertical_scroll_only=True, hide_vertical_scroll=False, size=(60, 15), enable_events=True, key='Table', visible=True) ]] valorTotal = [[sg.Text('', size=(1, 1))], [ sg.Text('', size=(30, 1)), sg.Text('TOTAL:', size=(18, 1), font=('Helvetica', 18)), sg.Text(' R$ ' + self.totalSomado, size=(15, 1), font=('Helvetica', 35, 'bold'), background_color='#343434', text_color='#FFFFFF', key='Soma') ]] layout = [ [ sg.Text('', size=(30, 1)), sg.Text('\n ADICIONAR ITENS DA LISTA \n', size=(60, 3), justification='center', background_color='#000000', text_color='#FFFFFF'), sg.Text('', size=(30, 1)) ], [sg.Text('', size=(1, 0))], [ sg.Text('Selecione o Item: ', size=(30, 0)), sg.Combo(self.produtos, size=(67, 0), key='Produtos'), sg.Text('', size=(12, 0)), sg.Text('Quantidade: ', size=(10, 0)), sg.InputText('1', size=(8, 0), key='Quantidade') ], [sg.Text('', size=(1, 0))], [ sg.Text('', size=(30, 0)), sg.Text('Valor Un.:', size=(8, 0)), sg.Text('R$ 0,00', size=(18, 0), font=('Helvetica', 15), justification='center', key='ValorUn'), sg.Text('Valor Total.:', size=(10, 0)), sg.Text('R$ 0,00', size=(18, 0), font=('Helvetica', 15), justification='center', key='ValorTotal') ], [sg.Text('', size=(1, 0))], [ sg.Text('', size=(12, 2)), sg.Button('Add Item', size=(20, 2), font=('Helvetica', 12), key='Add', button_color=('Black', 'SeaGreen2'), border_width=0), sg.Button('Cancelar Item', size=(20, 2), font=('Helvetica', 12), key='Cancelar', button_color=('White', 'Red'), border_width=0), sg.Button('Finalizar Pedido', size=(20, 2), font=('Helvetica', 12), key='Finalizar', border_width=0), sg.Button('Sair', size=(20, 2), font=('Helvetica', 12), key='Sair', button_color=('White', 'FireBrick4'), border_width=0), sg.Text('', size=(12, 2)) ], [sg.Text('', size=(1, 0))], ] + table + valorTotal self.janela = sg.Window("PROGRAMA DE VENDA ONLINE", size=(1080, 680)).layout(layout) while True: self.event, self.values = self.janela.Read(timeout=100) if self.values['Quantidade'] == "": self.values['Quantidade'] = 1 elif self.values['Quantidade'].isdigit() == False: sg.popup_ok('Digite uma quantidade válida!', title="Alerta!") self.janela.FindElement("Quantidade").Update(1) self.values['Quantidade'] = 1 if self.event is None or self.event == "Sair": self._venda.sairBanco() break if self.values['Produtos'] != "": valores = self._venda.mostrarValores(self.values['Produtos']) self.janela.FindElement("ValorUn").Update( 'R$ ' + self.dinheiroFormat(valores[2])) if self.values['Quantidade'] == '1' or self.values[ 'Quantidade'] == '': self.janela.FindElement("ValorTotal").Update( 'R$ ' + self.dinheiroFormat(valores[2])) self.selecionado = [ valores[0], self.values['Produtos'], self.dinheiroFormat(valores[2]), 1, self.dinheiroFormat(valores[2]) ] else: self.janela.FindElement("ValorTotal").Update( 'R$ ' + self.dinheiroFormat(valores[2] * int(self.values['Quantidade']))) self.selecionado = [ valores[0], self.values['Produtos'], self.dinheiroFormat(valores[2]), int(self.values['Quantidade']), self.dinheiroFormat(valores[2] * int(self.values['Quantidade'])) ] if self.event == 'Add': if len(self.selecionado) == 0: sg.popup_ok('Você deve selecionar ao menos 1 produto!', title="Alerta!") else: self.dados.append(self.selecionado) val = self._venda.totalCompra(self.dados) self.totalSomado = self.dinheiroFormat(str(val)) self.janela.FindElement("Table").Update(self.dados) self.janela.FindElement("Soma").Update(' R$ ' + self.totalSomado) if self.event == 'Cancelar': if self.values['Table'] != []: self.dados.pop(self.values['Table'][0]) self.janela.FindElement("Table").Update(self.dados) else: sg.popup_ok( 'Você deve selecionar ao menos 1 produto na tabela para excluir!', title="Alerta!", ) if self.event == 'Finalizar': if len(self.dados) != 0: # 0 - Cancela Compra, 1 - Pagou em Dinheiro, 2 - Pagou em Cartão, 3 - Acrescentar Item result = self.telaFormasDePagamento() if result == 0: self.reset() elif result == 3: pass else: # Colocar a atualização do pagamento setPagamento = self.telaPagamento(self.dados, result) if type(setPagamento) == float: idPedido = self._venda.comprar( self.dados, result, setPagamento) if idPedido != 0: endereco = self.telaEndereco(idPedido) if endereco != 0: tipoPagamento = result dadosVenda = [ idPedido[0], setPagamento, tipoPagamento ] venda = self._venda.registrarVenda( dadosVenda) if venda > 0: status = self.telaRegistroDeVenda( venda) if status == True: self.reset() else: self._venda.sairBanco() break else: sg.popup_ok( 'Deu algo errado ao finalizar o pedido, tente novamente ou entre em contato com o desenvolvedor!', title="Alerta!", ) self.reset() else: self.reset() else: sg.popup_ok( 'Deu algo errado ao finalizar o pedido, tente novamente ou entre em contato com o desenvolvedor!', title="Alerta!", ) else: sg.popup_ok( 'Ocorreu um erro desconhecido, tente novamente ou entre em contato com o desenvolvedor!', title="Alerta!") else: sg.popup_ok( 'Você deve registrar ao menos 1 item para finalizar o pedido!', title="Alerta!")
['Bloomberg Code', 'Beta Relative To', 'Information Ratio'], 'Long-Short Equity': ['HFRIEHI Index', 'U.S. Equity', 0.30], 'Global Macro': ['HFRIMI Index', 'U.S. Equity', 0.30], } # %% sg.SetOptions(element_padding=(1, 1)) bw = {'size': (20,1)} # %% # Building Blocks Tab build_layout = [[sg.T('', **bw)], [sg.T('As of Date', **bw), sg.Combo(values=as_of_date, **bw, key='as_of_date'), sg.T('Currency', **bw), sg.Combo(values=currencies, default_value='USD', **bw, key='currency'), sg.T('Lambda', **bw), sg.Combo(values=[float(f'{i:.2f}') for i in list(np.arange(0, 1.01, 0.01))], default_value=0.99, **bw, key='lambda_val')], [sg.T('_'*190)], [sg.T('', **bw), sg.T('US', **bw), sg.T('Global', **bw), sg.T('Global Ex-US', **bw), sg.T('Emerging', **bw), sg.T('Country-Specific', **bw)], [sg.T('Inflation (%)', **bw), sg.Combo(values=value_range, default_value=2.2, **bw, key='us_inflation'), sg.Combo(values=value_range, default_value=1.8, **bw, key='gl_inflation'),
def newAlarm(): '''Opens window to create a new alarm, and select days in which alarm plays.''' layout = [ [ sg.Combo(hourList, size=(3, 1), key="-Hour-", default_value='12'), sg.Text(":"), sg.Combo(minuteList, size=(3, 1), enable_events=True, key="-Minute-", default_value='01'), sg.Combo(periodList, size=(3, 2), enable_events=True, key='-Period-', default_value='PM'), ], [ sg.Listbox(dayList, key='-DaySelect-', size=(25, 8), select_mode='multiple'), ], [ sg.Submit(), sg.Exit(), ], ] window = sg.Window("New Alarm", layout, finalize=True) for i in [window['-Hour-'], window['-Minute-'], window['-Period-']]: #Bind window elements in list to <Enter> i.bind('<Enter>', 'Enter-') #creating `i=Enter-` event, causing the associated #combo box to drop down automatically on mouse over while True: event, values = window.read() if event in ['Exit', sg.WIN_CLOSED]: break elif event == '-Hour-Enter-': window['-Hour-'].Widget.event_generate('<Button-1>') elif event == '-Minute-Enter-': window['-Minute-'].Widget.event_generate('<Button-1>') elif event == '-Period-Enter-': window['-Period-'].Widget.event_generate('<Button-1>') elif event == 'Submit': daysOn = [ idx for idx, i in enumerate(dayList) if i in values['-DaySelect-'] ] #Maps days selected in `-DaySelect-` to ints clocks.append( Clock(values['-Hour-'], values['-Minute-'], values['-Period-'], daysOn)) #create a new #instance of the `Clock` class break window.close()
def run(self, action): if action is not "gui": self.perform_command_line(action) return sg.theme('DarkAmber') star_tab_layout = [[sg.T('Plotting expected star color\n')], [ sg.Text('Select star type:'), sg.Combo( available_templates, key='star_type', default_value=self.used_config['star_type']) ], [ sg.Text('Saturation:'), sg.Input(key='saturation', default_text='1.0', size=(10, )) ], [sg.Button('Check star color')]] emission_tab_layout = [[ sg.T('Plotting expected emission lines color\n') ], [sg.Text('Select emission lines:')], [ sg.Combo(available_emission_lines, key='emission_line_1', default_value='H alpha'), sg.Text('Strength: '), sg.Input(key='emission_line_1_strength', default_text='1.0', size=(10, )) ], [ sg.Combo(available_emission_lines, key='emission_line_2', default_value='OIII'), sg.Text('Strength: '), sg.Input(key='emission_line_2_strength', default_text='1.0', size=(10, )) ], [ sg.Combo(available_emission_lines, key='emission_line_3', default_value='SII'), sg.Text('Strength: '), sg.Input(key='emission_line_3_strength', default_text='1.0', size=(10, )) ], [sg.Button('Check lines combined color')]] layout = [[ sg.Text('Select camera:'), sg.Combo(available_cameras, key='camera', default_value=self.used_config['camera']), ], [ sg.Text('Select master filter (for all channels):'), sg.Combo(available_filters, key='filter_L', default_value=self.used_config['filter_L']), ], [ sg.Text('Select filter for R channel:'), sg.Combo(available_filters, key='filter_R', default_value=self.used_config['filter_R']), sg.Text('Multiplier:'), sg.Input(key='red_x', default_text='1.0', size=(10, )), ], [ sg.Text('Select filter for G channel:'), sg.Combo(available_filters, key='filter_G', default_value=self.used_config['filter_G']), sg.Text('Multiplier:'), sg.Input(key='green_x', default_text='1.0', size=(10, )), ], [ sg.Text('Select filter for B channel:'), sg.Combo(available_filters, key='filter_B', default_value=self.used_config['filter_B']), sg.Text('Multiplier:'), sg.Input(key='blue_x', default_text='1.0', size=(10, )), ], [ sg.TabGroup([[ sg.Tab('Stars', star_tab_layout), sg.Tab('Emission lines', emission_tab_layout) ]]) ], [sg.Button('Plot responses')], [sg.Canvas(key='-CANVAS-')], [sg.Button('Exit')]] self.window = sg.Window('Choose configuration', layout) while True: event, values = self.window.read() if event is None: break if event is 'Exit': exit(0) if event is 'Check star color': config = validate_config(values) print('You entered ', config) self.get_responses(config) self.plot_star(self.get_rgb_color(config), config) self.fig.savefig("_current_star_.png") self.draw_figure(self.window['-CANVAS-'].TKCanvas) if event is 'Plot responses': config = validate_config(values) self.get_responses(config) self.window['-CANVAS-'].TKCanvas.delete("ALL") self.plot_responses(config) self.fig.savefig("_current_responses_.png") self.draw_figure(self.window['-CANVAS-'].TKCanvas) self.window.close()
def make_window(): """ Creates the main window :return: The main window object :rtype: (sg.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.Column([ [ sg.Listbox(values=get_file_list(), select_mode=sg.SELECT_MODE_EXTENDED, size=(50, 20), bind_return_key=True, key='-DEMO LIST-') ], [ sg.Text('Filter (F1):', tooltip=filter_tooltip), sg.Input(size=(25, 1), focus=True, 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.B('Copy Path') ], [ sg.Text('Find (F2):', 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', expand_x=True, expand_y=True) lef_col_find_re = sg.pin( sg.Col([[ sg.Text('Find (F3):', 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, reroute_cprint=True) ], [sg.B('Settings'), sg.Button('Exit')], [sg.T('Demo Browser Ver ' + __version__)], [ sg.T('PySimpleGUI ver ' + sg.version.split(' ')[0] + ' tkinter ver ' + sg.tclversion_detailed, font='Default 8', pad=(0, 0)) ], [sg.T('Python ver ' + sys.version, font='Default 8', pad=(0, 0))], [ sg.T('Interpreter ' + sg.execute_py_get_interpreter(), font='Default 8', pad=(0, 0)) ], ] options_at_bottom = sg.pin(sg.Column([[ sg.CB('Verbose', enable_events=True, k='-VERBOSE-', tooltip='Enable to see the matches in the right hand column'), sg.CB('Show only first match in file', default=True, enable_events=True, k='-FIRST MATCH ONLY-', tooltip='Disable to see ALL matches found in files'), sg.CB('Find ignore case', default=True, enable_events=True, k='-IGNORE CASE-'), sg.CB('Wait for Runs to Complete', default=False, enable_events=True, k='-WAIT-') ]], pad=(0, 0), k='-OPTIONS BOTTOM-', expand_x=True, expand_y=False), expand_x=True, expand_y=False) 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, 30), 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.Column([[left_col],[ lef_col_find_re]], element_justification='l', expand_x=True, expand_y=True), sg.Column(right_col, element_justification='c', expand_x=True, expand_y=True)], [ sg.Pane([ sg.Column([[left_col], [lef_col_find_re]], element_justification='l', expand_x=True, expand_y=True), sg.Column(right_col, element_justification='c', expand_x=True, expand_y=True) ], orientation='h', relief=sg.RELIEF_SUNKEN, k='-PANE-') ], [options_at_bottom] ] # --------------------------------- Create Window --------------------------------- window = sg.Window('PSG Demo & Project Browser', layout, finalize=True, resizable=True, use_default_focus=False, right_click_menu=sg.MENU_RIGHT_CLICK_EDITME_VER_EXIT) window.set_min_size(window.size) window['-DEMO LIST-'].expand(True, True, True) window[ML_KEY].expand(True, True, True) window['-PANE-'].expand(True, True, True) window.bind('<F1>', '-FOCUS FILTER-') window.bind('<F2>', '-FOCUS FIND-') window.bind('<F3>', '-FOCUS RE FIND-') 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) window.bring_to_front() return window
# ----------------------------------------------------------------------------- sg.LOOK_AND_FEEL_TABLE['Marocha'] = {'BACKGROUND': '#709053', 'TEXT': '#fff4c9', 'INPUT': '#c7e78b', 'TEXT_INPUT': '#000000', 'SCROLL': '#c7e78b', 'BUTTON': ('white', '#709053'), 'PROGRESS': ('#01826B', '#D0D0D0'), 'BORDER': 1, 'SLIDER_DEPTH': 0, 'PROGRESS_DEPTH': 0, } sg.theme(theme) cb_currency = sg.Combo( list(REAL_CURRENCY.values()), default_selected_real_currency, enable_events=True, size=(6, 1), key='-CB-REAL-CURRENCY-') cb_theme = sg.Combo( ['SIWY', 'MAROCHA'], 'MAROCHA', enable_events=True, size=(15, 1), key='-CB-THEME-') start_time = datetime.now() refresh_time = start_time refresh_delay = 90 text_date_time = sg.Text(start_time.strftime("%B %d, %Y %H:%M:%S"))
gui_left_upper = [ [ sg.Text('density'), sg.Slider(key='density', range=(50, 95), resolution=5, size=(10, 20), default_value=90, orientation='horizontal', pad=((0, 0), (0, 20)), tooltip='The ratio of households to housing units') ], [ sg.Text('% similar wanted', tooltip=tooltip_1), sg.Combo(key='% similar wanted', values=[0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100], default_value=100, tooltip=tooltip_1) ], [ sg.Text('Max agents per step'), sg.Slider( key='max_agents_per_step', range=(10, 2000), resolution=10, size=(10, 20), default_value=500, orientation='horizontal', pad=((0, 0), (0, 20)), tooltip='Maximium number of unhappy agents to move each step.') ], ]
yp = (yp - yp.min()) / (yp.max() - yp.min() + 0.000001) img.append(yp.reshape(y_dim, x_dim)) img = np.dstack(img) if channels == 3: img = hsv2rgb(img) img = (img * 255).astype(np.uint8) return img # --------------------------------- MAIN ----------------------------------------------------------- sg.theme('Dark Blue 3') # please make your windows colorful layout = [[sg.Text('Shape of image (required):')], [ sg.Combo(['640 x 360', '854 x 480', '1280 x 720', '1920 x 1080'], key='shape') ], [sg.Text('_' * 60)], [sg.Button('I love random!', size=(15, 3))], [sg.Text('Variance:')], [ sg.Slider(range=(1, 200), default_value=50, size=(20, 15), orientation='horizontal', key='variance') ], [sg.Text('Customize layers')], [ sg.Text('Layer 1:'), sg.Text('Number of neurons'), sg.InputText('8', size=(10, 15), key='l1_n'), sg.Text('Activation'), sg.Combo([
image_subsample=1, border_width=False, key='etodatekey', target='einvisibletokey', format=("%Y-%m-%d")), sg.In(key='einvisibletokey', enable_events=True, default_text=date_export, visible=False) ], [ sg.T('File Format:', size=(10, 1), pad=(10, 0)), sg.Combo(('.csv', '.xlsx', '.xls'), size=(13, 1), default_value='.csv', key='efileformatkey', readonly=True) ], [ sg.B('Save', key='eokkey', pad=(10, 30), button_color=sg.TRANSPARENT_BUTTON, image_filename='images\\okcancel.png', font=('Roboto', 11), image_size=(100, 36), image_subsample=1, border_width=False), sg.B('Close', key='ecancelkey',
data=get_img_data('img/logo.png', maxsize=(200, 200), first=True)) spotify = spotipy.Spotify( client_credentials_manager=SpotifyClientCredentials()) sg.theme('Reddit') left_column = [ [ sg.In(size=(25, 1), enable_events=True, key="query_input"), # search box sg.Button('Search'), # search button sg.Combo([i for i in range(1, 101)], size=(3, 3), key="k", default_value=10), sg.Combo(['sum', 'avg', 'max', 'min'], size=(4, 4), key="score_selector", default_value='avg'), sg.Combo( ['union', 'intersection', 'phrase', 'combo intersection-union'], size=(10, 10), key="mode_selector", default_value='union'), sg.Combo([i for i in range(1, 10)], size=(3, 3), key="interval_selector", default_value='1') ],
def create_gui(self): self.logger.debug("Creating GUI") latitude_col1 = [ [PyGUI.Text("Degrees")], [PyGUI.InputText(size=(10, 1), key="latDeg", enable_events=True)], ] latitude_col2 = [ [PyGUI.Text("Minutes")], [PyGUI.InputText(size=(10, 1), key="latMin", enable_events=True)], ] latitude_col3 = [ [PyGUI.Text("Seconds")], [ PyGUI.InputText(size=(10, 1), key="latSec", pad=(5, (3, 10)), enable_events=True) ], ] longitude_col1 = [ [PyGUI.Text("Degrees")], [PyGUI.InputText(size=(10, 1), key="lonDeg", enable_events=True)], ] longitude_col2 = [ [PyGUI.Text("Minutes")], [PyGUI.InputText(size=(10, 1), key="lonMin", enable_events=True)], ] longitude_col3 = [ [PyGUI.Text("Seconds")], [ PyGUI.InputText(size=(10, 1), key="lonSec", pad=(5, (3, 10)), enable_events=True) ], ] frameelevationlayout = [ [PyGUI.Text("Feet")], [ PyGUI.InputText(size=(20, 1), key="elevFeet", enable_events=True) ], [PyGUI.Text("Meters")], [ PyGUI.InputText(size=(20, 1), key="elevMeters", enable_events=True, pad=(5, (3, 10))) ], ] mgrslayout = [ [ PyGUI.InputText(size=(20, 1), key="mgrs", enable_events=True, pad=(5, (3, 12))) ], ] framedatalayoutcol2 = [ [PyGUI.Text("Name")], [PyGUI.InputText(size=(20, 1), key="msnName", pad=(5, (3, 10)))], ] framewptypelayout = [[ PyGUI.Radio("WP", group_id="wp_type", default=True, enable_events=True, key="WP"), PyGUI.Radio("MSN", group_id="wp_type", enable_events=True, key="MSN"), PyGUI.Radio("FP", group_id="wp_type", key="FP", enable_events=True), PyGUI.Radio("ST", group_id="wp_type", key="ST", enable_events=True) ], [ PyGUI.Radio("IP", group_id="wp_type", key="IP", enable_events=True), PyGUI.Radio("DP", group_id="wp_type", key="DP", enable_events=True), PyGUI.Radio("HA", group_id="wp_type", key="HA", enable_events=True), PyGUI.Radio("HB", group_id="wp_type", key="HB", enable_events=True) ], [ PyGUI.Button( "Quick Capture", disabled=self.capture_button_disabled, key="quick_capture", pad=(5, (3, 8))), PyGUI.Text("Sequence:", pad=((0, 1), 3), key="sequence_text", auto_size_text=False, size=(8, 1)), PyGUI.Combo(values=("None", 1, 2, 3), default_value="None", auto_size_text=False, size=(5, 1), readonly=True, key="sequence", enable_events=True) ]] frameactypelayout = [[ PyGUI.Radio("F/A-18C", group_id="ac_type", default=True, key="hornet", enable_events=True), PyGUI.Radio("AV-8B", group_id="ac_type", disabled=False, key="harrier", enable_events=True), PyGUI.Radio("M-2000C", group_id="ac_type", disabled=False, key="mirage", enable_events=True), PyGUI.Radio("F-14A/B", group_id="ac_type", disabled=False, key="tomcat", enable_events=True), PyGUI.Radio("A-10C", group_id="ac_type", disabled=False, key="warthog", enable_events=True), ]] framelongitude = PyGUI.Frame("Longitude", [[ PyGUI.Column(longitude_col1), PyGUI.Column(longitude_col2), PyGUI.Column(longitude_col3) ]]) framelatitude = PyGUI.Frame("Latitude", [[ PyGUI.Column(latitude_col1), PyGUI.Column(latitude_col2), PyGUI.Column(latitude_col3) ]]) frameelevation = PyGUI.Frame("Elevation", frameelevationlayout, pad=(5, (3, 10))) frameactype = PyGUI.Frame("Aircraft Type", frameactypelayout) framepositionlayout = [ [framelatitude], [framelongitude], [ frameelevation, PyGUI.Column([ [PyGUI.Frame("MGRS", mgrslayout)], [ PyGUI.Button("Capture from DCS F10 map", disabled=self.capture_button_disabled, key="capture", pad=(1, (18, 3))) ], [ PyGUI.Text(self.capture_status, key="capture_status", auto_size_text=False, size=(20, 1)) ], ]) ], ] frameposition = PyGUI.Frame("Position", framepositionlayout) framedata = PyGUI.Frame("Data", framedatalayoutcol2) framewptype = PyGUI.Frame("Waypoint Type", framewptypelayout) col0 = [ [PyGUI.Text("Select profile:")], [ PyGUI.Combo(values=[""] + self.get_profile_names(), readonly=True, enable_events=True, key='profileSelector', size=(27, 1)) ], [ PyGUI.Listbox(values=list(), size=(30, 27), enable_events=True, key='activesList') ], [ PyGUI.Button("Add", size=(12, 1)), PyGUI.Button("Update", size=(12, 1)) ], [PyGUI.Button("Remove", size=(26, 1))], # [PyGUI.Button("Move up", size=(12, 1)), # PyGUI.Button("Move down", size=(12, 1))], [ PyGUI.Button("Save profile", size=(12, 1)), PyGUI.Button("Delete profile", size=(12, 1)) ], [PyGUI.Text(f"Version: {self.software_version}")] ] col1 = [ [PyGUI.Text("Select preset location")], [ PyGUI.Combo(values=[""] + [ base.name for _, base in self.editor.default_bases.items() ], readonly=False, enable_events=True, key='baseSelector'), PyGUI.Button(button_text="F", key="filter") ], [framedata, framewptype], [frameposition], [frameactype], [PyGUI.Button("Enter into aircraft", key="enter")], ] colmain1 = [ [ PyGUI.MenuBar([[ "Profile", [ [[ "Import", [ "Paste as string from clipboard", "Load from encoded file" ] ]], "Export", [ "Copy as string to clipboard", "Copy plain text to clipboard", "Save as encoded file" ], ] ]]) ], [PyGUI.Column(col1)], ] layout = [ [PyGUI.Column(col0), PyGUI.Column(colmain1)], ] return PyGUI.Window('DCS Waypoint Editor', layout)
class gui_broker(): #Set theme layout sg.theme('Default 1') # Get assets from assets_list assets = AssetsList.get_assetslist() # Layout layout = [ [ sg.Text('Painel da Corretora', size=(40, 0), text_color='#8B0000', font=('Helvetica', 12), justification='center') ], [sg.Text('Servidor'), sg.Input('localhost', size=(20, 2))], [ sg.Text('Informações da oferta:', text_color='red', justification='center') ], [ sg.Text('Cod. Corretora'), sg.Combo(assets), sg.Text('Ativo'), sg.Combo(assets) ], [ sg.Text('Quantidade'), sg.Input('', size=(7, 0)), sg.Text('Preço'), sg.Input('', size=(7, 0)) ], [sg.Button('Compra', size=(20, 0)), sg.Button('Venda', size=(20, 0))], #[sg.Button('Abrir Visualizador', size=(42,0))] ] #Window window = sg.Window('Painel da Corretora', layout, margins=(20, 20)) while True: event, values = window.read() # Checks if quantity and price is not null if values[3] != '' and values[3] != '0' and values[4] != '' and values[ 4] != '0': # Checks if active and broker have been completed if values[1] != '' and values[2] != '': if event.lower() == 'compra' or event.lower() == 'venda': routing_key = event.lower() + '.' + values[2].lower() message = values[3] + '; ' + values[4] + '; ' + values[ 1].lower() emit_broker = EmitBroker(host=values[0], routing_key=routing_key, message=message) emit_broker.start() if event == sg.WIN_CLOSED: # if user closes window or clicks cancel break
import importlib importlib.reload(mc) importlib.reload(ms) #excelから設定値等を読み込み(将来対応) #S=ba.excel_read(2,2) start_address = 0 sendlist = [0] * 65535 # セクション1 - オプションの設定と標準レイアウト sg.theme('Dark Blue 3') layout_tab1 = [[sg.Text("")], [ sg.Text("ファンクション", size=(15, 1)), sg.Combo(("3", "16(将来対応)"), default_value="3", size=(10, 1), key="-function_code-") ], [ sg.Text("開始レジスタ", size=(15, 1)), sg.InputText("123", key="start_register") ], [ sg.Text("レジスタ数", size=(15, 1)), sg.InputText("2", key="amount_of_registers") ], [sg.Submit(button_text="クエリ実行", key="p1")]] layout_tab2 = [ [sg.Text("")], [ sg.Text("サーバー所持値", size=(15, 1)),
import random import PySimpleGUI as gui # define the gui layout layout = [[ gui.Text("Size"), gui.Combo(list(range(8, 17)), default_value=8, key="size") ], [gui.Input(key="pass", size=(16, 1), default_text="P@S$C0D3")], [gui.Button("Generate", focus=True)]] #Initialize the gui Window window = gui.Window("PassWordGenerator", layout, size=(200, 100)) # Requirements of the password small = 'abcdefghijklmnopqrstuvwxyz' capital = small.upper() numbers = '1234567890' symbols = '_!@#$%^&*+-><' # now the gui implementation begins while True: event, values = window.read() if event == "Generate": #password generator # Create a random password from above data password = "".join( random.sample("".join([small, capital, numbers, symbols]), values["size"])) window["pass"].update(password) if event == gui.WIN_CLOSED:
], [ sg.Slider(**ds, key="_loan_amount_slider_", enable_events=True), sg.Slider(**ds, key="_down_payment_slider_", enable_events=True) ], [ sg.Text("Loan Years", **dst, size=(10, 1)), sg.Text("Base Loan Interest", **dst), sg.Text("Supplementary Loan Interest", **dst) ], [ sg.Combo([num for num in range(1, 41)], default_value=40, size=(3, 1), font=("Helvetica", 14), key="_loan_years_"), sg.InputText(**ib, key="_base_loan_interest_", default_text=3.54), sg.InputText(**ib, key="_sup_loan_interest_", default_text=4.84) ], [sg.Button("Calculate Monthly Payment")], [ sg.Text("Monthly Payment is: ", **dt), sg.Text(0, key="_property_monthly_payment_", **dt) ]]
def main(): inputShape = video.read()[1].shape camHeight = inputShape[0] camWidth = inputShape[1] fileName = "" sg.theme('Black') layout = [[sg.Text("Welcome to the Virtual Camera Hub!")], [sg.Button("Continue")]] window = sg.Window("Virtual Camera Hub", layout) while True: event, values = window.Read(timeout=20, timeout_key='timeout') if event == "Continue" or event == sg.WIN_CLOSED: window.close() break layout = [[sg.Text('Continue if this is the correct webcam', size=(40, 1), justification='center', font='Helvetica 20')],[sg.Image(filename='', key='image')], [sg.Button("Continue")],] window = sg.Window('Virtual Camera Hub', layout) while True: event, values = window.Read(timeout=20, timeout_key='timeout') if event == sg.WIN_CLOSED: exit(0) if event == 'Continue': window.close() break window.FindElement('image').Update(data=cv2.imencode('.png', video.read()[1])[1].tobytes()) layout = [ [sg.Text('Please enter the file name of the image or video to use from the filler folder:'), sg.InputText()], [sg.Text('What is the file type?'), sg.Combo(['.png', '.avi'], enable_events=True)], [sg.Button('Continue'), sg.Button('Take a New Photo'), sg.Button('Make a New Video')],] window = sg.Window('Virtual Camera Hub', layout) while True: event, values = window.Read(timeout=20, timeout_key='timeout') if event == sg.WIN_CLOSED: exit(0) if event == 'Continue' and values[0] != "" and values[1] != "": fileName = values[0] fileType = values[1] window.close() break if event == "Take a New Photo" or event == "Make a New Video": window.close() break script_dir = os.path.dirname(os.path.abspath(__file__)) rel_path = "./filler/" dir_path = os.path.normpath(os.path.join(script_dir, rel_path)) photoLayout = [[sg.Text('Take a New Photo', size=(40, 1), justification='center', font='Helvetica 20')],[sg.Image(filename='', key='image')], [sg.Button("Take Photo")],] photoWindow = sg.Window('Virtual Camera Hub', photoLayout) if event == "Take a New Photo": while True: button, values = photoWindow.Read(timeout=20, timeout_key='timeout') ret, frame = video.read() if button == 'Take Photo': fileName = 'Capture' fileType = '.png' fileCombine = fileName + fileType os.chdir(dir_path) cv2.imwrite(fileCombine, frame) photoWindow.close() break photoWindow.FindElement('image').Update(data=cv2.imencode('.png', video.read()[1])[1].tobytes()) videoLayout = [[sg.Text('Make a New Video', size=(40, 1), justification='center', font='Helvetica 20')],[sg.Image(filename='', key='image')], [sg.Button("Start Video"), sg.Button("Stop Video")]] videoWindow = sg.Window('Virtual Camera Hub', videoLayout) script_dir = os.path.dirname(os.path.abspath(__file__)) rel_path = "./filler/Video.avi" dir_path = os.path.normpath(os.path.join(script_dir, rel_path)) if event == "Make a New Video": events = [] fourcc = cv2.VideoWriter_fourcc(*'XVID') out = cv2.VideoWriter(dir_path, fourcc, 30, (640, 480)) while True: button, values = videoWindow.Read(timeout=20, timeout_key='timeout') events.append(button) ret, frame = video.read() if button == 'Start Video' or 'Start Video' in events: fileName = 'Video' fileType = '.avi' fileCombine = fileName + fileType out.write(frame) if button == 'Stop Video' and 'Start Video' in events: out.release() videoWindow.close() break videoWindow.FindElement('image').Update(data=cv2.imencode('.png', video.read()[1])[1].tobytes()) layout = [ [sg.Text('Activate Virtual Camera', size=(40, 1), justification='center', font='Helvetica 20')], [sg.Button('Webcam'), sg.Button('Filler'), sg.Button('Exit')],] window = sg.Window('Virtual Camera Hub', layout) script_dir = os.path.dirname(os.path.abspath(__file__)) rel_path = "./filler/{}{}".format(fileName, fileType) if event == "Take a New Photo": rel_path = "../filler/{}{}".format(fileName, fileType) file_path = os.path.normpath(os.path.join(script_dir, rel_path)) if fileType == '.png': filler = imageio.imread(file_path) frameFinal = cv2.resize(filler, (640, 480)) frameFinal = cv2.cvtColor(frameFinal, cv2.COLOR_RGBA2RGB) script_dir = os.path.dirname(os.path.abspath(__file__)) rel_path = "./filler/{}{}".format(fileName, fileType) file_path = os.path.normpath(os.path.join(script_dir, rel_path)) if fileType == '.avi': frameVideo = cv2.VideoCapture(file_path) length = int(frameVideo.get(cv2.CAP_PROP_FRAME_COUNT)) event, values = window.read() if event == "Exit" or event == sg.WIN_CLOSED: exit(0) if event == "Webcam": window.close() if event == "Filler": window.close() with pyvirtualcam.Camera(height=camHeight, width=camWidth, fps=30) as cam: print(f'Using virtual camera: {cam.device}') if fileType == '.avi': count = 1 reverse = False frameList = [] while len(frameList) != length: ret, frame = frameVideo.read() if not ret: raise RuntimeError('Error fetching frame') frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) frameList.append(frame) while True: ret, frame = video.read() if not ret: raise RuntimeError('Error fetching frame') RGBframe = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) if event == "Webcam": cam.send(RGBframe) if event == "Filler": if fileType == ".png": cam.send(frameFinal) elif fileType == ".avi": frame = frameList[count] if count == length - 1 or count == 0: reverse = not reverse cam.send(frame) if reverse == True: count -= 1 elif reverse == False: count += 1 if keyboard.is_pressed(chr(27)): break cam.sleep_until_next_frame()
def settings_window(): """ Show the settings window. This is where the folder paths and program paths are set. Returns True if settings were changed :return: True if settings were changed :rtype: (bool) """ try: global_editor = sg.pysimplegui_user_settings.get('-editor program-') except: global_editor = '' try: global_explorer = sg.pysimplegui_user_settings.get( '-explorer program-') except: global_explorer = '' try: # in case running with old version of PySimpleGUI that doesn't have a global PSG settings path global_theme = sg.theme_global() except: global_theme = '' layout = [ [sg.T('Program Settings', font='DEFAULT 25')], [sg.T('Path to Tree', font='_ 16')], [ sg.Combo(sorted(sg.user_settings_get_entry('-folder names-', [])), default_value=sg.user_settings_get_entry( '-demos folder-', get_demo_path()), size=(50, 1), key='-FOLDERNAME-'), sg.FolderBrowse('Folder Browse', target='-FOLDERNAME-'), sg.B('Clear History') ], [sg.T('Editor Program', font='_ 16')], [sg.T('Leave blank to use global default'), sg.T(global_editor)], [ sg.In(sg.user_settings_get_entry('-editor program-', ''), k='-EDITOR PROGRAM-'), sg.FileBrowse() ], [sg.T('File Explorer Program', font='_ 16')], [sg.T('Leave blank to use global default'), sg.T(global_explorer)], [ sg.In(sg.user_settings_get_entry('-explorer program-'), k='-EXPLORER PROGRAM-'), sg.FileBrowse() ], [sg.T('Theme', font='_ 16')], [sg.T('Leave blank to use global default'), sg.T(global_theme)], [ sg.Combo([''] + sg.theme_list(), sg.user_settings_get_entry('-theme-', ''), readonly=True, k='-THEME-') ], [ sg.T('Double-click a File Will:'), sg.R('Run', 2, sg.user_settings_get_entry('-dclick runs-', False), k='-DCLICK RUNS-'), sg.R('Edit', 2, sg.user_settings_get_entry('-dclick edits-', False), k='-DCLICK EDITS-'), sg.R('Nothing', 2, sg.user_settings_get_entry('-dclick none-', False), k='-DCLICK NONE-') ], [ sg.CB('Use Advanced Interface', default=advanced_mode(), k='-ADVANCED MODE-') ], [sg.B('Ok', bind_return_key=True), sg.B('Cancel')], ] window = sg.Window('Settings', layout) settings_changed = False while True: event, values = window.read() if event in ('Cancel', sg.WIN_CLOSED): break if event == 'Ok': sg.user_settings_set_entry('-demos folder-', values['-FOLDERNAME-']) sg.user_settings_set_entry('-editor program-', values['-EDITOR PROGRAM-']) sg.user_settings_set_entry('-theme-', values['-THEME-']) sg.user_settings_set_entry( '-folder names-', list( set( sg.user_settings_get_entry('-folder names-', []) + [ values['-FOLDERNAME-'], ]))) sg.user_settings_set_entry('-explorer program-', values['-EXPLORER PROGRAM-']) sg.user_settings_set_entry('-advanced mode-', values['-ADVANCED MODE-']) sg.user_settings_set_entry('-dclick runs-', values['-DCLICK RUNS-']) sg.user_settings_set_entry('-dclick edits-', values['-DCLICK EDITS-']) sg.user_settings_set_entry('-dclick nothing-', values['-DCLICK NONE-']) settings_changed = True break elif event == 'Clear History': sg.user_settings_set_entry('-folder names-', []) sg.user_settings_set_entry('-last filename-', '') window['-FOLDERNAME-'].update(values=[], value='') window.close() return settings_changed
def 控件(): menu_def = [['&File', ['&Open', '&Save', 'E&xit', 'Properties']], ['&Edit', ['Paste', ['Special', 'Normal', ], 'Undo'], ],['&Help', '&About...'], ] # ------ Column Definition ------ # #当较小的元素左侧有一个较高的元素时,则需要一列。 #将来也放到layout的一个控件里面sg.Column(col, background_color='blue') 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)], #文本显示内容,那个relief参数可以添加阴影效果 #sg.RELIEF_RIDGE,RELIEF_RAISED为外凸效果 #sg.RELIEF_FLAT平滑效果,也就是默认值 #RELIEF_GROOVE,sg.RELIEF_SUNKEN内凹效果 #RELIEF_SOLID黑框选中 [sg.Text('(Almost) All widgets in one Window!', size=( 30, 1), justification='center', font=("Helvetica", 25),relief=sg.RELIEF_RIDGE)], [sg.Text('Here is some text.... and a place to enter text')], # 单行文本输入框 [sg.InputText('This is my text')], #框架组件,之前说过 [sg.Frame(layout=[ #复选框,将来valuse的返回值只有False,True [sg.CBox('这里输什么将来就显示什么', size=(10, 1)), sg.CBox('My second checkbox!', default=True)], #这里是单选框,第一个参数是实际显示值,第二个是id,这个只要学过HTML的都懂吧 [sg.Radio('My first Radio! ', "123",default=True, size=(10, 1)), sg.Radio('My second Radio!', "123")]], title='Options', relief=sg.RELIEF_SUNKEN, tooltip='Use these to set flags')], #这个是多行输入框 [sg.MLine(default_text='This is the default Text should you decide not to type anything', size=(35, 3)), sg.MLine(default_text='A second multi-line', size=(35, 3))], #这个是多选一框(好像叫selectbox),就是那种选择出身年份的,name和value都很好懂 [sg.Combo(('Combobox 1', 'Combobox 2'), default_value='Combobox 1', size=(20, 1)), #用来滑动的条,你可以选择滑动条的范围,方向"h"/"v",尺寸,默认值 #实际值就是你拖动的结果 sg.Slider(range=(1, 100), orientation='h', size=(34, 20), default_value=85)], #不知道是个啥,跟上面那个Combo很像 [sg.OptionMenu(('Menu Option 1', 'Menu Option 2', 'Menu Option 3'))], #就是你平时用browse实际出来的那个有拖动条的那种 #功能上跟Combo很像 [sg.Listbox(values=('Listbox 1', 'Listbox 2', 'Listbox 3'), size=(30, 3))], #可以画线,还可以展位(用" ") [sg.Text('_' * 100)], #File选择器,值就是你选中的File的路径 [ sg.FolderBrowse()], #快捷方式按钮,还有提示tooltip就是你把光标移动到控件旁边后会提示的小白色的提示框 [sg.Submit(tooltip='Click to submit this form'), sg.Cancel()]] window = sg.Window('Everything bagel', layout, no_titlebar=True, default_element_size=(40, 1), grab_anywhere=False, ) event, values = window.read()
def main_window(self): layout = [ [sg.Text("Choose Operation to perform:")], [ sg.Combo(['Copy', 'Move'], default_value='Move', key='OPERATION') ], [ sg.Frame(layout=[[sg.Text("Sort by Type")], [ sg.Radio("Enabled", "RADIO1", default=False, key='SBYTE', enable_events=True), sg.Radio("Disabled", "RADIO1", default=True, key='SBYTD', enable_events=True) ]], title='Sorting Options', title_color='red', relief=sg.RELIEF_SUNKEN) ], [sg.Text("Choose filetype:")], [ sg.Combo([ "Archive ('.zip', '.rar'...)", "Image ('.png', '.jpg'...)", "Text ('.txt', '.docx'...)" ], key='FILETYPE', enable_events=True) ], [sg.Ok(), sg.Cancel()] ] window = sg.Window('Choose filetype to move', layout, default_element_size=(40, 1)) while True: event, values = window.read() if event in (sg.WIN_CLOSED, 'Cancel'): break elif event in 'Ok': if values['FILETYPE'] not in file_type: append_file_type(values['FILETYPE']) run_fmover = FileMover() append_mode(values['OPERATION']) if len(sort_list) == 1: for value in sort_list: if value == 'Sort by Type': run_fmover.filemover(values['OPERATION'], value) else: run_fmover.filemover(values['OPERATION'], None) else: run_fmover.filemover(values['OPERATION'], None) else: run_fmover = FileMover() append_mode(values['OPERATION']) if len(sort_list) == 1: for value in sort_list: if value == 'Sort by Type': run_fmover.filemover(values['OPERATION'], value) else: run_fmover.filemover(values['OPERATION'], None) else: run_fmover.filemover(values['OPERATION'], None) elif event in 'SBYTE': if values['SBYTE'] is True: sort_list.append('Sort by Type') else: pass elif event in 'SBYTD': if values['SBYTD'] is True: sort_list.clear() else: pass else: pass window.close()
if self.reference_agent.distance_to_xy(center_pixel()) >= 250: self.grow_shrink('shrink') return True elif self.reference_agent.distance_to_xy(center_pixel()) <= 50: self.grow_shrink('grow') return True return False # ############################################## Define GUI ############################################## # import PySimpleGUI as sg gui_left_upper = [ [ sg.Combo(KNOWN_FIGURES, key='shape', default_value='netlogo_figure', pad=((0, 9), (0, 0)), tooltip='Shape of element'), sg.Slider(key='nbr_agents', range=(1, 100), default_value=18, size=(10, 20), orientation='horizontal', pad=((0, 0), (0, 20)), tooltip='Number of elements') ], [ sg.Text('Figure to trace'), sg.Combo(['breathe', 'clockwise', 'counter-clockwise', 'twitchy'], key='figure', default_value='clockwise')
layout = [ [sg.Text('')], # padding [ sg.Image(r'resources\icon.png'), sg.Text('SimpleGA', font=('Helvetica', 21)) ], # Title [ sg.Text('A program for parameters evaluation for a genetic algorithm.', font=('Helvetica', 12)) ], # subtitle [sg.Text('_' * 80)], [ sg.Text('Evaluate Parameter: '), sg.Combo(values=parameters, default_value=parameters[0], enable_events=True, size=(24, 4), font=('Helvetica', 10), key='_COMBO_') ], # combobox with parameter selection [sg.Text('')], # padding # range(start, stop, step) [ sg.Text('Start'), sg.Spin([i for i in range(2, 10000)], initial_value=2, size=(6, 1), key='_START_'), sg.Text(' Stop'), sg.Spin([i for i in range(2, 10000)], initial_value=4,
imwatchingyou.show_popout_window() 3. You must find a location in your code to "refresh" the debugger. Some loop that's executed often. In this loop add this call: imwatchingyou.refresh() """ layout = [ [sg.T('A typical PSG application')], [sg.In(key='_IN_')], [sg.T(' ', key='_OUT_', size=(30, 1))], [ sg.Radio('a', 1, key='_R1_'), sg.Radio('b', 1, key='_R2_'), sg.Radio('c', 1, key='_R3_') ], [sg.Combo(['c1', 'c2', 'c3'], size=(6, 3), key='_COMBO_')], [sg.Output(size=(50, 6))], [sg.Ok(), sg.Exit(), sg.Button('Debugg'), sg.Button('Popout')], ] window = sg.Window('This is your Application Window', layout) counter = 0 timeout = 100 # Start the program with the popout window showing so you can immediately start debugging! imwatchingyou.show_debugger_popout_window() while True: # Your Event Loop
# Main Menu ====================================================================================== # Make main menu layout menu_layout = [ #matrica sa svim izborima [ sg.Text(size=(10, 1)), sg.Text("Main menu", size=(10, 1), justification='center'), sg.Text(size=(10, 1)) ], [ sg.Text("Player 1:", size=(10, 1)), sg.Text(size=(12, 1)), sg.Text("Player 2:", size=(10, 1)) ], [ sg.Combo(['Human', 'AI Lvl1', 'AI Lvl2', 'AI Lvl3'], size=(10, 1), enable_events=True), sg.Text(size=(10, 1)), sg.Combo(['Human', 'AI Lvl1', 'AI Lvl2', 'AI Lvl3'], size=(10, 1), enable_events=True) ], [ sg.InputText("Name", size=(12, 1), disabled=True, key='p1name'), sg.Text(size=(10, 1)), sg.InputText("Name", size=(12, 1), disabled=True, key='p2name') ], [sg.Text(size=(10, 1))], [ sg.Text(size=(10, 1)), sg.Text("Difficulty:", size=(10, 1), key='diff'), sg.Text(size=(10, 1))
finalize=True) event, values = window.read() window.close() if event in (sg.WINDOW_CLOSED, '-Exit-'): quit() layout = [[ sg.Text('Età:', size=(22, 1), justification='right'), sg.Input(key='Age', size=(12, 1), enable_events=True) ], [ sg.Text('Sesso:', size=(22, 1), justification='right'), sg.Combo(['Uomo', 'Donna'], key='Gender', default_value='Uomo', size=(10, 1)) ], [ sg.Text('Poliuria:', size=(22, 1), justification='right'), sg.Combo(['Sì', 'No'], key='Polyuria', default_value='No', size=(10, 1)) ], [ sg.Text('Polidipsia:', size=(22, 1), justification='right'), sg.Combo(['Sì', 'No'], key='Polydipsia', default_value='No', size=(10, 1))
Train_path = "" Test_path = "" column1 = [[sg.Button('Write a review', font='Arial', size=(45, None), button_color=('white', '#3f3f44'), )], ] column2 = [[sg.Text(' ' * 30, size=(None, 1))], [sg.FileBrowse('Select train data', font='Arial', button_color=('white', '#3f3f44'), size=(16, None), file_types=(("text files", ".csv"), ("all files", "*.*"),))], [sg.Text(' ' * 30, size=(None, 1))], [sg.FileBrowse('Select test data', font='Arial', button_color=('white', '#3f3f44'), size=(16, None), file_types=(("text files", ".csv"), ("all files", "*.*"),))], [sg.Text(' ' * 30, size=(None, 1))], [sg.Button('Show accuracy', font='Arial', size=(16, None), button_color=('white', '#3f3f44'), )], [sg.Text(' ' * 30, size=(None, 1))], [sg.Button('Classify', font='Arial', size=(16, None), button_color=('white', '#3f3f44'), )], [sg.Text(' ' * 15, size=(None, 1))], [sg.Text(' ' * 5, size=(None, 1)),sg.Combo(['1', '2','3','4','5','6','7','8'],key='Depth'),sg.Text('Depth')]] column3 = [[sg.Multiline('User log data will be displayed here :\n',text_color='#23E000', size=(45, 20), key='-OUTPUT-' + sg.WRITE_ONLY_KEY)], ] column4 = [[sg.Button('Show Tree', font='Arial', size=(16, None), button_color=('black', '#fdcb9e'))], ] column5 = [[sg.Button('Quit', font='Arial', size=(16, None), button_color=('black', '#fdcb9e'))], ] layout = [[sg.Column(column1, justification='center')], [sg.Column(column2, justification='l'), sg.Column(column3)], [sg.Text(' ' * 10), sg.Column(column4, element_justification='left'), sg.Column(column5)], ] # Display the window and get values
# Refresh the display from self.ca_lines self.set_display_from_lines() # Update the 'rows' widget. gui_set('rows', value=len(self.ca_lines)) # ############################################## Define GUI ############################################## # import PySimpleGUI as sg """ The following appears at the top-left of the window. """ ca_left_upper = [ [ sg.Text('Row justification'), sg.Combo(values=['Left', 'Center', 'Right'], key='justification', default_value='Right') ], HOR_SEP(30), [ sg.Text('Initial row:', pad=(None, (20, 0)), tooltip="0's and 1's for the initial row. An empty \n" + "string will set the initial row to all 0's."), sg.Input(default_text="1", key='init_line', size=(20, 1), text_color='white', background_color='steelblue4', justification='center') ],
def create_GUI(): sg.theme('Dark Teal 11') menu_def = [['File', ['Select CustomLevels Folder', 'Exit']], ['Settings', ['Use Normal Auto Offset', 'Use Fast Auto Offset X']], ['Help', 'About'], ] menu_elem = sg.Menu(menu_def) col1 = [ [sg.Text(size=(38,2), key='track_name_and_author')], [sg.Text(size=(38,1), key='track_duration')], [sg.Image(key='cover_image')], [sg.Text('', size=(38, 1))], # Empty line [sg.Text('', key='video_name', size=(38, 2))], [sg.Text('', key='video_duration', size=(38, 1))], [sg.Image(r'', key='thumbnail')], [sg.Text('Video Downloaded - ', size=(38, 1), visible=False, key='video_size')], [sg.Text('Offset ', size=(38, 1), visible=False, key='offset')] ] layout = [ [menu_elem], [sg.Combo(values=('All tracks', 'Tracks without video', 'Tracks with video'), default_value='All tracks', enable_events=True, key='track_filter', size=(30, 1)), sg.Text('Filter'), sg.InputText(size=(10, 1), key='filter', enable_events=True)], [sg.Listbox(values='', size=(50, 34), enable_events=True, key='tracklist', right_click_menu=['&Right', ['Search Youtube', 'Open track folder', 'Automate']]), sg.Column(col1, vertical_alignment="top")], [sg.Text('Youtube Search Term:')], [sg.Input('', size=(50, 1), key='search_field')], [sg.Button('Search Youtube', bind_return_key=True), sg.Button('Download', disabled=True), sg.InputText(enable_events=True, key='bs_folder', visible=False), sg.Button('Auto Offset', disabled=True)] ] global window windowSize = (953, 783) # Default window size window = sg.Window('Beat Saber Track Manager', layout, font='Courier 12', icon='BSTM.ico', size=(windowSize), resizable=True).finalize() # Check for config.ini config_bs_folder() auto_offset = 1 # Use fast auto offset as default while True: event, values = window.read(timeout=1000) if event == sg.WIN_CLOSED or event == 'Exit': # if user closes window or clicks cancel if os.path.exists('cover.png'): os.remove('cover.png') if os.path.exists('thumbnail.png'): os.remove('thumbnail.png') break # Grab the text from the chosen listbox choice and paste it into searchbox in readable format. # Also grabs the data from the track's info.dat if event == 'tracklist': #info = None # Clear video info from previous searches clear_info('') tracklist() # Run search with the search term, only grabs the 1st result if event == 'Search Youtube': search_youtube() # Download the video, when download button is pressed if event == 'Download': download_video() # Calculate audio/video offset using MVP's tools or librosa if event == 'Auto Offset': run_auto_offset(auto_offset) if event == 'bs_folder': browse_bs_folder() if event == 'track_filter': check_tracks() if event == 'Open track folder': try: search = str(values['tracklist']) # Chosen track track_path = values['bs_folder'] + '/' + search.replace('[\'', '').replace('\']', '').replace('"]', '').replace('["', '') print(track_path) os.startfile(track_path) except UnboundLocalError: print('No track selected') except FileNotFoundError: print('No track selected') if event == 'Automate': if search_youtube(): print('search success') if download_video(): print('dl success') run_auto_offset(auto_offset) if event == 'Select CustomLevels Folder': trackfolder = sg.popup_get_folder('', title='Select CustomLevels folder', no_window=True, modal=True, keep_on_top=True) if not trackfolder: print('No folder selected!') else: clear_info('') window['bs_folder'].update(trackfolder) browse_bs_folder() if event == 'filter': results = [] if values['track_filter'] == 'All tracks': filter_list = both_video elif values['track_filter'] == 'Tracks without video': filter_list = no_video elif values['track_filter'] == 'Tracks with video': filter_list = yes_video if len(values['filter']) < 2: window['tracklist'].update(filter_list) # Don't filter, if the filter has less than 3 characters if len(values['filter']) < 3: continue else: clear_info('') for i in filter_list: if (values['filter']) in i.lower(): results.append(i) window['tracklist'].update(results) window.Refresh() if event == 'Use Normal Auto Offset': auto_offset = 0 menu_def = [['File', ['Select CustomLevels Folder', 'Exit']], ['Settings', ['Use Normal Auto Offset X', 'Use Fast Auto Offset']], ['Help', 'About'], ] menu_elem.Update(menu_def) if event == 'Use Fast Auto Offset': auto_offset = 1 menu_def = [['File', ['Select CustomLevels Folder', 'Exit']], ['Settings', ['Use Normal Auto Offset', 'Use Fast Auto Offset X']], ['Help', 'About'], ] menu_elem.Update(menu_def) if event == 'About': print(window.size) webbrowser.open('https://github.com/CuriousCod/BeatSaberTrackManager/tree/master') # Works perfectly when maximizing window, otherwise only updates when any action is taken in the window if windowSize != window.size: print(window.size) CurrentWindowSize = window.size TracksElementSize = (int(CurrentWindowSize[0] * 0.1) - 45, int(CurrentWindowSize[1] * 0.044)) print(TracksElementSize) window['tracklist'].set_size(TracksElementSize) windowSize = window.size window.close()
def make_window(self, caption, gui_left_upper, gui_right_upper=None, clear=None, bounce=True, fps=None): """ Create the window, including sg.Graph, the drawing surface. """ # --------------------- PySimpleGUI window layout and creation -------------------- clear_line = [] if clear is None else \ [sg.Checkbox('Clear before setup?', key='Clear?', default=clear, pad=((0, 0), (10, 0)), tooltip='Bounce back from the edges of the screen?')] bounce_checkbox_line = [] if bounce is None else \ [sg.Checkbox('Bounce?', key='Bounce?', default=bounce, pad=((20, 0), (10, 0)), tooltip='Bounce back from the edges of the screen?')] clear_line += bounce_checkbox_line # Always an fps combo box, but make it visible only if the user specifies such a box. # The box is necessary to allow the program to set fps even if the end user doesn't fps_combo_line = [ sg.Text('Frames/second', tooltip='The maximum frames/second.', visible=bool(fps), pad=((0, 10), (17, 0))), sg.Combo(key=gui.FPS, values=FPS_VALUES, tooltip='The maximum frames/second.', default_value=fps, visible=bool(fps), pad=((0, 0), (17, 0)), enable_events=True) ] setup_go_line = [ sg.Button(self.SETUP, pad=((0, 10), (10, 0))), sg.Button(gui.GO_ONCE, disabled=True, button_color=('white', 'green'), pad=((0, 10), (10, 0))), sg.Button(gui.GO, disabled=True, button_color=('white', 'green'), pad=((0, 30), (10, 0)), key=gui.GOSTOP) ] exit_button_line = [ sg.Exit(button_color=('white', 'firebrick4'), key=self.EXIT, pad=((0, 0), (10, 0))), sg.Checkbox('Grab anywhere', key='Grab', default=False, pad=((40, 0), (10, 0))) ] col1 = [ *gui_left_upper, gui.HOR_SEP(), setup_go_line, clear_line, fps_combo_line, gui.HOR_SEP(), exit_button_line ] lower_left_pixel_xy = (0, self.screen_shape_width_height[1] - 1) upper_right_pixel_xy = (self.screen_shape_width_height[0] - 1, 0) if gui_right_upper is None: gui_right_upper = [[]] # graph is a drawing area, a screen on which the model is portrayed, i.e., the patches and the agents. # It consists mainly of a TKCanvas. graph = sg.Graph(self.screen_shape_width_height, lower_left_pixel_xy, upper_right_pixel_xy, background_color='black', key='-GRAPH-', enable_events=True, drag_submits=True) col2 = gui_right_upper + [[graph]] # layout is the actual layout of the window. The stuff above organizes it into component parts. # col1 is the control buttons, sliders, etc. # col2 is the graph plus whatever the user wants to put above it. # layout is a single "GUI line" with these two components in sequence. layout = [[sg.Column(col1), sg.Column(col2)]] # window is a window with that layout. window = sg.Window(caption, layout, margins=(5, 20), use_default_focus=False, grab_anywhere=False, return_keyboard_events=True, finalize=True) # -------------- Magic code to integrate PyGame with tkinter ------- w_id = graph.TKCanvas.winfo_id() os.environ['SDL_WINDOWID'] = str(w_id) os.environ[ 'SDL_VIDEODRIVER'] = 'windib' # change this to 'x11' to make it work on Linux return window