def main(): ComputeStrLayout = [[ sg.Multiline(key='computeStr', background_color='black', text_color='yellow', font="any 30", size=(60, 4)) ]] numsBtLayout = [[ sg.Button(i * 3 + j, size=(4, 2), button_color=('white', 'green'), key=i * 3 + j) for j in range(1, 4) ] for i in range(0, 3)] comBtLayout1= [[sg.Button('0',size=(4,2),key=0),sg.Button('.',size=(4,2),key='.')],\ [sg.Button('(',size=(4,2),key='('),sg.Button('C',size=(4,2),key='C')],\ [sg.Button(')',size=(4,2),key=')'),sg.Button('<=',size=(4,2),key='BackDel')],\ ] comBtLayout2=[\ [sg.Button('+',size=(4,2),key='+'),\ sg.Button('-',size=(4,2),key='-'),\ sg.Button('×',size=(4,2),key='*'),\ sg.Button('÷',size=(4,2),key='/'),\ sg.Button('=',size=(4,2),key='=')]\ ] mainLayout=[[sg.Frame('',ComputeStrLayout)],\ [sg.Frame('',numsBtLayout),\ sg.Column(comBtLayout1)],\ [sg.Frame('',comBtLayout2)],\ ] window = sg.Window('计算器', mainLayout) while True: event, values = window.read() if event in (sg.WIN_CLOSED, 'Exit'): #最后从屏幕上移除 window.close() break if event in list( range(10)) or event in ['.', '(', ')', '+', '-', '*', '/']: window['computeStr'].update(values['computeStr'] + str(event)) elif event == 'C': window['computeStr'].update('') elif event == '=': window['computeStr'].update("%.2f" % computeResult(values['computeStr'])) elif event == 'BackDel': window['computeStr'].update(values['computeStr'][:-1])
import PySimpleGUIWeb as sg import datetime DEFAULT_BASE64_ICON = b'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' sg.ChangeLookAndFeel('GreenTan') layout = [ [sg.Text('PySimpleGUIWeb running on the web and in your browser!', size=(60,1), font=('Comic sans ms', 20), text_color='red')], [sg.Text('This program has been running for... ', size=(30,1)),sg.Text('', size=(30,1), key='_DATE_')], [sg.Text('', size=(30,1), key='_TEXT_')], [sg.Input('Single Line Input', do_not_clear=True, enable_events=True, size=(30,1))], [sg.Multiline('Multiline Input', do_not_clear=True, size=(40,4), enable_events=True)], [sg.Multiline('Multiline Output', size=(80,8), key='_MULTIOUT_', font='Courier 12')], [sg.Checkbox('Checkbox 1', enable_events=True, key='_CB1_'), sg.Checkbox('Checkbox 2', default=True, enable_events=True, key='_CB2_')], [sg.Combo(values=['Combo 1', 'Combo 2', 'Combo 3'], default_value='Combo 2', key='_COMBO_',enable_events=True, readonly=False, tooltip='Combo box', disabled=False, size=(12,1))], [sg.Listbox(values=('Listbox 1', 'Listbox 2', 'Listbox 3'), size=(10,3))], [sg.Slider((1,100), default_value=80, key='_SLIDER_', visible=True, enable_events=True, orientation='h')], [sg.Spin(values=(1,2,3),initial_value=2, size=(4,1))], [sg.Image(filename=r'dot:logo.jpg')], [sg.OK(), sg.Button('Exit', button_color=('white', 'red'))] ] window = sg.Window('My PySimpleGUIWeb Window', default_element_size=(30,1), font='Helvetica 18', background_image=r'dot:logo.jpg' ).Layout(layout) start_time = datetime.datetime.now()
title_location=sg.TITLE_LOCATION_TOP_RIGHT, #element_justification='right' ) ], [ sg.OK('+', key="add_item"), sg.Button('-', key="Delete-done"), sg.Button('^', key="Todo"), sg.Button('Archive list', key="Archive list") ], #add_ext_ is the key for event handling [ sg.Button('Save', key='Save'), sg.Button('Safe Exit', key='Safe Exit'), sg.Button('Open Folder', key=os.getcwd()) ], [sg.Multiline('debugger', key="debug", size=(WIDTH, 2))], ] sg.theme(THEME) window = sg.Window( "*** TO DO ***", layout, web_port=1111, web_start_browser=False, #keep_on_top=True, #grab_anywhere=True, #no_titlebar=True, return_keyboard_events=True, #resizable=True, #location=(263, 430), ).Finalize()
window.find_element('PLC_NEW').update("") window.find_element('SLOT_NEW').update("") window.find_element('TYPE_NEW').update("") window.find_element('AREA_NEW').update("") window.find_element('ADR_NEW').update("") window.find_element('ALIAS_NEW').update("data_alias") window.find_element('ACTIVATE_NEW').update(False) window.find_element('INTERVAL_NEW').update(intervals[3]) elif button == "Show raw configuration file": #get contect of xml file tree = ET.parse(config_PATH) root = tree.getroot() xml_str = ET.tostring(root, encoding='utf-8', method='xml') reparsed = xml.dom.minidom.parseString(xml_str) pretty = reparsed.toprettyxml(encoding='utf-8') conf_layout = [[sg.Multiline(pretty, size=(100, 20))]] window_config = sg.Window('Raw configuration').Layout(conf_layout) conf_button, conf_val = window_config.Read(timeout=0) if button == None: window_config.close() elif button == 'Find aliases': aliases_plc = get_data_aliases(values['PLC']) window.find_element('ALIAS').update(values=aliases_plc) elif button == 'Find data': data_plc = get_data_by_alias(values['PLC'], values['ALIAS']) # check if there is any data for choosen plc and alias if len(data_plc): window.find_element('TYPE_EDIT').update(data_plc[0]) window.find_element('AREA_EDIT').update(data_plc[1])
[ sg.Text('', size=(20, 1)), sg.Listbox(values=('Must get a follow up', 'May be interesting', 'Typical Source'), size=(20, 4), enable_events=True, key='_LIST_'), sg.Text('', size=(10, 1), key='_TEXT_002'), sg.Slider((1, 10), default_value=1, key='_SLIDER_', visible=True, enable_events=True), sg.Multiline('', do_not_clear=True, size=(40, 4), enable_events=True, key='_VAR_COMMENT_'), sg.Multiline('', do_not_clear=True, size=(40, 4), enable_events=True, key='_QUASAR_COMMENT_'), sg.Text( 'http://skyserver.sdss.org/dr15/en/tools/explore/summary.aspx?ra=0.00591&dec=20.01226', size=(30, 1), key='_SDSS_') ] #[sg.Text('', size=(30,1), key='_TEXT_003')], #[sg.Text('Notes about quasar in general', size=(30,1), key='_TEXT__004')], #[sg.Input('', do_not_clear=True, enable_events=True, size=(70,1))],
], [ 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.Button("Execute", size=(25, 1))]]) ], [Sg.Column(launch.layout_final)], [ Sg.DropDown(launch.mod.get("{}".format(element[0]))[3], key="dd_ex") ], [ Sg.Column(launch.layout), Sg.Column([[ Sg.Text(launch.mod.get("{}".format(element[0]))[1], size=(800, 200), key="{}".format(element[0]), auto_size_text=True) ]]) ], [Sg.Column([[Sg.Multiline("ok", key="ex_out", size=(500, 900))]])] ] mainWindow = Sg.Window("pswrapped", layout=launch.layout_finals).Finalize() ex_out = mainWindow.FindElement("dd_ex") ex_ml = mainWindow.FindElement("ex_out") #print(v, old_v) #print(v) old_v = v if b == "dd_ex": ex_out = mainWindow.FindElement("dd_ex") ex_ml = mainWindow.FindElement("ex_out")
def HowDoI(): ''' Make and show a window (PySimpleGUI form) that takes user input and sends to the HowDoI web oracle Excellent example of 2 GUI concepts 1. Output Element that will show text in a scrolled window 2. Non-Window-Closing Buttons - These buttons will cause the form to return with the form's values, but doesn't close the form :return: never returns ''' # ------- Make a new Window ------- # sg.ChangeLookAndFeel('GreenTan') # give our form a spiffy set of colors layout = [ [sg.Text('Ask and your answer will appear here....', size=(40, 1))], [sg.MultilineOutput(size_px=(980, 400), key='_OUTPUT_')], # [ sg.Spin(values=(1, 2, 3, 4), initial_value=1, size=(2, 1), key='Num Answers', font='Helvetica 15'), [ sg.Checkbox('Display Full Text', key='full text', font='Helvetica 15'), sg.T('Command History', font='Helvetica 15'), sg.T('', size=(40, 3), text_color=sg.BLUES[0], key='history') ], [ sg.Multiline(size=(85, 5), enter_submits=True, key='query', do_not_clear=False), sg.ReadButton('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( 'How Do I ??', default_element_size=(30, 1), icon=DEFAULT_ICON, font=('Helvetica', ' 17'), default_button_element_size=(8, 2), return_keyboard_events=False, ) window.Layout(layout) # ---===--- Loop taking in user input and using it to query HowDoI --- # command_history = [] history_offset = 0 while True: event, values = window.Read() # print(event, values) if type(event) is int: event = str(event) if event == 'SEND': query = values['query'].rstrip() window.Element('_OUTPUT_').Update(query, append=True) print(query) QueryHowDoI(query, 1, values['full text'], window) # send the string to HowDoI command_history.append(query) history_offset = len(command_history) - 1 window.FindElement('query').Update( '' ) # manually clear input because keyboard events blocks clear window.FindElement('history').Update('\n'.join( command_history[-3:])) elif event == None or event == 'EXIT': # if exit button or closed using X break elif 'Up' in event and len(command_history): # scroll back in history command = command_history[history_offset] history_offset -= 1 * (history_offset > 0) # decrement is not zero window.FindElement('query').Update(command) elif 'Down' in event and len( command_history): # scroll forward in history history_offset += 1 * (history_offset < len(command_history) - 1 ) # increment up to end of list command = command_history[history_offset] window.FindElement('query').Update(command) elif 'Escape' in event: # clear currently line window.FindElement('query').Update('') window.Close()
def mainloop(file, database, savedump, records, orderby, guimode): """Get user Janpanse input then parse it and record new words into database.""" jmd = Jamdict() knp = KNP() jumandict = sqlite3.connect(database) dictcursor = jumandict.cursor() dictcursor.execute( "CREATE TABLE IF NOT EXISTS words (id INTEGER PRIMARY KEY, name TEXT UNIQUE, desc TEXT, count INTEGER)" ) dumper = open(savedump, 'w') # Pass any command line argument for Web use if guimode == "web": # if there is use the Web Interface import PySimpleGUIWeb as sg import socket elif guimode == "tk": # default uses the tkinter GUI import PySimpleGUI as sg elif guimode == "qt": import PySimpleGUIQt as sg else: import PySimpleGUIWx as sg # All the stuff inside your window. header_list = [ "ID", "词汇", "读法", "原形", "词性", "词性细分", "活用型", "活用形", "语义信息", "代表符号" ] uifont = "Ariel 32" left_column_layout = [ [ sg.T("输入日语"), sg.FolderBrowse(), ], [ sg.Multiline("", size=(75, 10), key="nihongo"), ], [ sg.Button("分析", size=(30, 3), font=uifont, button_color=('white', 'green'), key="submit"), sg.Button("退出", size=(30, 3), font=uifont, button_color=('white', 'red'), key="exit") ], [ sg.Listbox(values=[], enable_events=True, size=(75, 20), key="parsedwords") ], ] right_column_layout = [ [sg.T("词汇意义")], [ sg.Listbox(values=[], enable_events=True, size=(75, 33), key="foundentries") ], ] layout = [[ sg.VSeperator(), sg.Column(left_column_layout), sg.VSeperator(), sg.Column(right_column_layout), ]] # Create the Window if guimode == "web": hostname = socket.gethostname() local_ip = socket.gethostbyname(hostname) print("local_ip is " + local_ip) window = sg.Window('日语学习', layout, web_ip=local_ip, web_port=8888, web_start_browser=False) else: window = sg.Window('日语学习', layout) resultlist = [] # Run the Event Loop while True: event, values = window.read() if event == "exit" or event == sg.WIN_CLOSED: break # Folder name was filled in, make a list of files in the folder if event == "submit": userinput = values["nihongo"] print("=================================") print(userinput) userinput = userinput.strip() userinput = userinput.encode('utf-8', 'surrogatepass').decode('utf-8') dumper.write(userinput + "\n\n") result = knp.parse(userinput.replace("\n", "")) print("=================================") print("词素") resultlist = result.mrph_list() parsedwords = [] for mrph in resultlist: # 访问每个词素 if mrph.midasi in {"、", "。", "「", "」", "\␣"}: continue message = "\tID:{}, 词汇:{}, 读法:{}, 原形:{}, 词性:{}, 词性细分:{}, 活用型:{}, 活用形:{}, 语义信息:{}, 代表符号:{}".format( mrph.mrph_id, mrph.midasi, mrph.yomi, mrph.genkei, mrph.hinsi, mrph.bunrui, mrph.katuyou1, mrph.katuyou2, mrph.imis, mrph.repname) print(message) dumper.write(message + "\n") parsedwords += [message] # use exact matching to find exact meaning dictcheck = jmd.lookup(mrph.genkei) if len(dictcheck.entries) == 0: dictcheck = jmd.lookup(mrph.midasi) if len(dictcheck.entries) == 0: dictcheck = jmd.lookup(mrph.yomi) if len(dictcheck.entries) > 0: desc = "" for entry in dictcheck.entries: desc = desc + entry.text(compact=False, no_id=True) + "\n" print("\n" + desc) dumper.write("\n" + desc + "\n") dictcursor.execute( 'INSERT INTO words (name, desc, count) VALUES ("{}", "{}", "{}") ON CONFLICT (name) DO UPDATE SET count = count + 1' .format(mrph.genkei.replace('"', '""'), desc.replace('"', '""'), 1)) jumandict.commit() window["parsedwords"].update(parsedwords) elif event == "parsedwords": # A file was chosen from the listbox selectedword = values["parsedwords"][0] print(selectedword) selectedid = int(selectedword.split(',')[0].split(':')[1].strip()) print("selectedid=" + str(selectedid) + " among " + str(len(resultlist)) + " entries") foundentries = [] for mrph in resultlist: # 访问每个词素 if selectedid != mrph.mrph_id: continue message = "\tID:{}, 词汇:{}, 读法:{}, 原形:{}, 词性:{}, 词性细分:{}, 活用型:{}, 活用形:{}, 语义信息:{}, 代表符号:{}".format( mrph.mrph_id, mrph.midasi, mrph.yomi, mrph.genkei, mrph.hinsi, mrph.bunrui, mrph.katuyou1, mrph.katuyou2, mrph.imis, mrph.repname) print(message) # use exact matching to find exact meaning dictcheck = jmd.lookup(mrph.genkei) if len(dictcheck.entries) == 0: dictcheck = jmd.lookup(mrph.midasi) if len(dictcheck.entries) == 0: dictcheck = jmd.lookup(mrph.yomi) foundentries += [message] foundentries += ["==================================="] if len(dictcheck.entries) > 0: for entry in dictcheck.entries: desc = entry.text(compact=False, no_id=True) print("\n" + desc) foundentries += [desc] window["foundentries"].update(foundentries) window.close() jumandict.close() dumper.close()
key='_JSONURLINPUT_', enable_events=False, tooltip='Input JSON Data Export URL(http://)', disabled=False, size=(60,1), do_not_clear=True, ), sg.Text('JSON data export URL(http://)', size=(30,1), font=('Helvetica, 16')) ], [ sg.Button('Start Logging', button_color=('white', 'blue')), sg.Button('Stop Logging', button_color=('white', 'green')), sg.Button('Stop Server', button_color=('white', 'red')) ], [ sg.Multiline( 'Data Output', size=(160, 12), key='_MULTIOUT_', font='Courier 14', autoscroll=True,) ]] ''' sg.Output(size=(160,12)) ''' # create the "Window" window = sg.Window( 'VSCapture Logging Interface', layout=layout, default_element_size=(60, 2), font='Helvetica 18', web_port=WEBPORT, web_start_browser=False, web_multiple_instance=True, disable_close=True,