Merge pull request #1406 from PySimpleGUI/Dev-latest
New Demo program showing long tasks
This commit is contained in:
		
						commit
						6af5d9176b
					
				
					 1 changed files with 74 additions and 0 deletions
				
			
		
							
								
								
									
										74
									
								
								DemoPrograms/Demo_Threaded_Work.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								DemoPrograms/Demo_Threaded_Work.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,74 @@ | |||
| #!/usr/bin/python3 | ||||
| import queue | ||||
| import threading | ||||
| import time | ||||
| 
 | ||||
| import PySimpleGUI as sg | ||||
| 
 | ||||
| # Put your long-running code in here | ||||
| def worker_thread(thread_name, gui_queue): | ||||
|     print('Starting thread - {} '.format(thread_name)) | ||||
|     # this is our "long running function call" | ||||
|     time.sleep(5)  # sleep for a while | ||||
| 
 | ||||
|     # at the end of the work, before exiting, send a message back to the GUI indicating end | ||||
|     gui_queue.put('{} - done'.format(thread_name))  # put a message into queue for GUI | ||||
| 
 | ||||
| 
 | ||||
| ######   ##     ## #### | ||||
| ##    ##  ##     ##  ## | ||||
| ##        ##     ##  ## | ||||
| ##   #### ##     ##  ## | ||||
| ##    ##  ##     ##  ## | ||||
| ##    ##  ##     ##  ## | ||||
| ######    #######  #### | ||||
| 
 | ||||
| def the_gui(gui_queue): | ||||
| 
 | ||||
|     layout = [[sg.Text('Multithreaded Work Example')], | ||||
|               [sg.Text('', size=(25, 1), key='_OUTPUT_')], | ||||
|               # [sg.Output(size=(40,6))], | ||||
|               [sg.Button('Go'), sg.Button('Exit')], ] | ||||
| 
 | ||||
|     window = sg.Window('Multithreaded Window').Layout(layout) | ||||
|     # --------------------- EVENT LOOP --------------------- | ||||
|     message = None | ||||
|     while True: | ||||
|         event, values = window.Read(timeout=100)  # wait for up to 100 ms for a GUI event | ||||
|         if event is None or event == 'Exit': | ||||
|             break | ||||
|         if event == 'Go': | ||||
|             window.Element('_OUTPUT_').Update('Starting long work....') | ||||
|             # simulate STARTING long run by starting a thread | ||||
|             threading.Thread(target=worker_thread, args=('Thread 1', gui_queue,), daemon=True).start() | ||||
| 
 | ||||
|         # --------------- Loop through all messages coming in from threads --------------- | ||||
|         try:  # see if something has been posted to Queue | ||||
|             message = gui_queue.get_nowait() | ||||
|         except queue.Empty:  # get_nowait() will get exception when Queue is empty | ||||
|             pass             # nothing in queue so do nothing | ||||
| 
 | ||||
|         # if message received from queue, display the message in the Window | ||||
|         if message is not None and message.startswith('Thread 1'): | ||||
|             # this is the place you would execute code at ENDING of long running task | ||||
|             window.Element('_OUTPUT_').Update(message) | ||||
|             window.Refresh()  # do a refresh because could be showing multiple messages before next Read | ||||
|             message = None | ||||
| 
 | ||||
|     # if user exits the window, then close the window and exit the GUI func | ||||
|     window.Close() | ||||
| 
 | ||||
| 
 | ||||
| ##     ##    ###    #### ##    ## | ||||
| ###   ###   ## ##    ##  ###   ## | ||||
| #### ####  ##   ##   ##  ####  ## | ||||
| ## ### ## ##     ##  ##  ## ## ## | ||||
| ##     ## #########  ##  ##  #### | ||||
| ##     ## ##     ##  ##  ##   ### | ||||
| ##     ## ##     ## #### ##    ## | ||||
| 
 | ||||
| if __name__ == '__main__': | ||||
|     # -- Create a Queue to communicate with GUI -- | ||||
|     gui_queue = queue.Queue()  # queue used to communicate between the gui and the threads | ||||
|     the_gui(gui_queue) | ||||
|     print('Exiting Program') | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue