#!/usr/bin/env python import PySimpleGUI as sg import time ''' Window that doesn't block good for applications with an loop that polls hardware ''' def StatusOutputExample(): # Create a text element that will be updated with status information on the GUI itself # Create the rows layout = [[sg.Text('Non-blocking GUI with updates')], [sg.Text('', size=(8, 2), font=('Helvetica', 20), justification='center', key='output')], [sg.Button('LED On'), sg.Button('LED Off'), sg.Button('Quit')]] # Layout the rows of the Window and perform a read. Indicate the Window is non-blocking! window = sg.Window('Running Timer', layout, auto_size_text=True) # # Some place later in your code... # You need to perform a Read on your window every now and then or # else it won't refresh. # # your program's main loop i = 0 while True: # This is the code that reads and updates your window event, values = window.read(timeout=10) window['output'].update('{:02d}:{:02d}.{:02d}'.format( (i // 100) // 60, (i // 100) % 60, i % 100)) if event in ('Quit', None): break if event == 'LED On': print('Turning on the LED') elif event == 'LED Off': print('Turning off the LED') i += 1 # Your code begins here # Broke out of main loop. Close the window. window.close() def RemoteControlExample(): layout = [[sg.Text('Robotics Remote Control')], [sg.Text(' '*10), sg.RealtimeButton('Forward')], [sg.RealtimeButton('Left'), sg.Text(' '*15), sg.RealtimeButton('Right')], [sg.Text(' '*10), sg.RealtimeButton('Reverse')], [sg.Text('')], [sg.Quit(button_color=('black', 'orange'))] ] window = sg.Window('Robotics Remote Control', layout, auto_size_text=True, finalize=True) # # Some place later in your code... # You need to perform a ReadNonBlocking on your window every now and then or # else it won't refresh. # # your program's main loop while True: # This is the code that reads and updates your window event, values = window.read(timeout=0, timeout_key='timeout') if event != 'timeout': print(event) if event in ('Quit', None): break window.close() def main(): RemoteControlExample() StatusOutputExample() sg.popup('End of non-blocking demonstration') if __name__ == '__main__': main()