''' A chatbot with history Scroll up and down through prior commands using the arrow keys Special keyboard keys: Up arrow - scroll up in commands Down arrow - scroll down in commands Escape - clear current command Control C - exit form '''
defChatBotWithHistory(): # ------- Make a new Window ------- # # give our form a spiffy set of colors sg.theme('GreenTan')
# ---===--- Loop taking in user input and using it --- # command_history = [] history_offset = 0
whileTrue: event, value = window.read()
if event == 'SEND': query = value['query'].rstrip() # EXECUTE YOUR COMMAND HERE print('The command you entered was {}'.format(query)) command_history.append(query) history_offset = len(command_history)-1 # manually clear input because keyboard events blocks clear window['query'].update('') window['history'].update('\n'.join(command_history[-3:]))
elif event in (sg.WIN_CLOSED, 'EXIT'): # quit if exit event or X break
elif'Up'in event and len(command_history): command = command_history[history_offset] # decrement is not zero history_offset -= 1 * (history_offset > 0) window['query'].update(command)
elif'Down'in event and len(command_history): # increment up to end of list history_offset += 1 * (history_offset -1) command = command_history[history_offset] window['query'].update(command)
elif'Escape'in event: window['query'].update('')
ChatBotWithHistory()
运行一下,看看效果:
这是一个带历史记录的聊天软件,如果你需要做一个类似的软件的话,可以直接复制代码,然后稍微改动一下。
组件大全
我们再来看一个例子:
#!/usr/bin/env python """ Example of (almost) all Elements, that you can use in PySimpleGUI. Shows you the basics including: Naming convention for keys Menubar format Right click menu format Table format Running an async event loop Theming your application (requires a window restart) Displays the values dictionary entry for each element And more!
# Table Data data = [["John", 10], ["Jen", 5]] headings = ["Name", "Score"]
input_layout = [[sg.Menu(menu_def, key='-MENU-')], [sg.Text('Anything that requires user-input is in this tab!')], [sg.Input(key='-INPUT-')], [sg.Slider(orientation='h', key='-SKIDER-'), sg.Image(data=sg.DEFAULT_BASE64_LOADING_GIF, enable_events=True, key='-GIF-IMAGE-'),], [sg.Checkbox('Checkbox', default=True, k='-CB-')], [sg.Radio('Radio1', "RadioDemo", default=True, size=(10,1), k='-R1-'), sg.Radio('Radio2', "RadioDemo", default=True, size=(10,1), k='-R2-')], [sg.Combo(values=('Combo 1', 'Combo 2', 'Combo 3'), default_value='Combo 1', readonly=True, k='-COMBO-'), sg.OptionMenu(values=('Option 1', 'Option 2', 'Option 3'), k='-OPTION MENU-'),], [sg.Spin([i for i in range(1,11)], initial_value=10, k='-SPIN-'), sg.Text('Spin')], [sg.Multiline('Demo of a Multi-Line Text Element!\nLine 2\nLine 3\nLine 4\nLine 5\nLine 6\nLine 7\nYou get the point.', size=(45,5), k='-MLINE-')], [sg.Button('Button'), sg.Button('Popup'), sg.Button(image_data=sg.DEFAULT_BASE64_ICON, key='-LOGO-')]]
asthetic_layout = [[sg.T('Anything that you would use for asthetics is in this tab!')], [sg.Image(data=sg.DEFAULT_BASE64_ICON, k='-IMAGE-')], [sg.ProgressBar(1000, orientation='h', size=(20, 20), key='-PROGRESS BAR-'), sg.Button('Test Progress bar')]]
logging_layout = [[sg.Text("Anything printed will display here!")], [sg.Output(size=(60,15), font='Courier 8')]]
graphing_layout = [[sg.Text("Anything you would use to graph will display here!")], [sg.Graph((200,200), (0,0),(200,200),background_color="black", key='-GRAPH-', enable_events=True)], [sg.T('Click anywhere on graph to draw a circle')], [sg.Table(values=data, headings=headings, max_col_width=25, background_color='black', auto_size_columns=True, display_row_numbers=True, justification='right', num_rows=2, alternating_row_color='black', key='-TABLE-', row_height=25)]]
specalty_layout = [[sg.Text("Any \"special\" elements will display here!")], [sg.Button("Open Folder")], [sg.Button("Open File")]]
theme_layout = [[sg.Text("See how elements look under different themes by choosing a different theme here!")], [sg.Listbox(values = sg.theme_list(), size =(20, 12), key ='-THEME LISTBOX-', enable_events = True)], [sg.Button("Set Theme")]]
return sg.Window('All Elements Demo', layout, right_click_menu=right_click_menu_def)
defmain(): window = make_window(sg.theme())
# This is an Event Loop whileTrue: event, values = window.read(timeout=100) # keep an animation running so show things are happening window['-GIF-IMAGE-'].update_animation(sg.DEFAULT_BASE64_LOADING_GIF, time_between_frames=100) if event notin (sg.TIMEOUT_EVENT, sg.WIN_CLOSED): print('============ Event = ', event, ' ==============') print('-------- Values Dictionary (key=value) --------') for key in values: print(key, ' = ',values[key]) if event in (None, 'Exit'): print("[LOG] Clicked Exit!") break elif event == 'About': print("[LOG] Clicked About!") sg.popup('PySimpleGUI Demo All Elements', 'Right click anywhere to see right click menu', 'Visit each of the tabs to see available elements', 'Output of event and values can be see in Output tab', 'The event and values dictionary is printed after every event') elif event == 'Popup': print("[LOG] Clicked Popup Button!") sg.popup("You pressed a button!") print("[LOG] Dismissing Popup!") elif event == 'Test Progress bar': print("[LOG] Clicked Test Progress Bar!") progress_bar = window['-PROGRESS BAR-'] for i in range(1000): print("[LOG] Updating progress bar by 1 step ("+str(i)+")") progress_bar.UpdateBar(i + 1) print("[LOG] Progress bar complete!") elif event == "-GRAPH-": graph = window['-GRAPH-'] # type: sg.Graph graph.draw_circle(values['-GRAPH-'], fill_color='yellow', radius=20) print("[LOG] Circle drawn at: " + str(values['-GRAPH-'])) elif event == "Open Folder": print("[LOG] Clicked Open Folder!") folder_or_file = sg.popup_get_folder('Choose your folder') sg.popup("You chose: " + str(folder_or_file)) print("[LOG] User chose folder: " + str(folder_or_file)) elif event == "Open File": print("[LOG] Clicked Open File!") folder_or_file = sg.popup_get_file('Choose your file') sg.popup("You chose: " + str(folder_or_file)) print("[LOG] User chose file: " + str(folder_or_file)) elif event == "Set Theme": print("[LOG] Clicked Set Theme!") theme_chosen = values['-THEME LISTBOX-'][0] print("[LOG] User Chose Theme: " + str(theme_chosen)) window.close() window = make_window(theme_chosen)