New Multi-threaded demo - requires GitHub version of PySimpleGUI.py
This commit is contained in:
		
							parent
							
								
									07e8c0737b
								
							
						
					
					
						commit
						d7f062f77c
					
				
					 1 changed files with 61 additions and 0 deletions
				
			
		
							
								
								
									
										61
									
								
								DemoPrograms/Demo_Multithreaded_Write_Event_Value.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								DemoPrograms/Demo_Multithreaded_Write_Event_Value.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,61 @@ | ||||||
|  | import PySimpleGUI as sg | ||||||
|  | import threading | ||||||
|  | import time | ||||||
|  | 
 | ||||||
|  | """ | ||||||
|  |     Threaded Demo - Uses Window.write_event_value communications | ||||||
|  |      | ||||||
|  |     Requires PySimpleGUI.py version 4.24.0.17 | ||||||
|  | 
 | ||||||
|  |     Demo of threads using a new way of communicating with threads that is done in a non-polled way. | ||||||
|  |     No longer do you need to run your event loop with a timeout value in order to multi-thread. | ||||||
|  |     Now you can pend on your read forever and use a special call that threads can call that will add a new item to the queue | ||||||
|  |     of items | ||||||
|  | 
 | ||||||
|  | """ | ||||||
|  | 
 | ||||||
|  | THREAD_EVENT = '-THEAD-' | ||||||
|  | 
 | ||||||
|  | def the_thread(window): | ||||||
|  |     """ | ||||||
|  |     The thread that communicates with the application through the window's events. | ||||||
|  | 
 | ||||||
|  |     Once a second wakes and sends a new event and associated value to the window | ||||||
|  |     """ | ||||||
|  |     i = 0 | ||||||
|  |     while True: | ||||||
|  |         time.sleep(1) | ||||||
|  |         window.write_event_value(THREAD_EVENT, i) | ||||||
|  |         i += 1 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def main(): | ||||||
|  |     """ | ||||||
|  |     The demo will display in the multiline info about the event and values dictionary as it is being | ||||||
|  |     returned from window.read() | ||||||
|  |     Every time "Start" is clicked a new thread is started | ||||||
|  |     Try clicking "go" to see that the window is active while the thread stuff is happening in the background | ||||||
|  |     """ | ||||||
|  | 
 | ||||||
|  |     layout = [  [sg.Text('My Window')], | ||||||
|  |                 [sg.Multiline(size=(40,20), key='-ML-', autoscroll=True, reroute_stdout=True, write_only=True, reroute_cprint=True)], | ||||||
|  |                 [sg.Input(key='-IN-')], | ||||||
|  |                 [sg.Button('Go'), sg.B('Start'), sg.Button('Exit')]  ] | ||||||
|  | 
 | ||||||
|  |     window = sg.Window('Window Title', layout) | ||||||
|  | 
 | ||||||
|  |     while True:             # Event Loop | ||||||
|  |         event, values = window.read() | ||||||
|  |         sg.cprint(event, values) | ||||||
|  |         if event == sg.WIN_CLOSED or event == 'Exit': | ||||||
|  |             break | ||||||
|  |         if event == 'Start': | ||||||
|  |             thread = threading.Thread(target=the_thread, args=(window,), daemon=True) | ||||||
|  |             thread.start() | ||||||
|  |         if event == THREAD_EVENT: | ||||||
|  |             sg.cprint(f'Data from the thread = {values[THREAD_EVENT]}', colors='white on red') | ||||||
|  |     window.close() | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | if __name__ == '__main__': | ||||||
|  |     main() | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue