New Demo - Threaded Progress Meter
This commit is contained in:
parent
f239ab36ba
commit
b8111190d4
|
@ -0,0 +1,71 @@
|
||||||
|
import PySimpleGUI as sg
|
||||||
|
import threading
|
||||||
|
import random
|
||||||
|
import time
|
||||||
|
|
||||||
|
"""
|
||||||
|
Demo - Multi-threaded downloader with one_line_progress_meter
|
||||||
|
|
||||||
|
Sometimes you don't have a choice in how your data is downloaded. In some programs
|
||||||
|
the download happens in another thread which means you cannot call PySimpleGUI directly
|
||||||
|
from the thread.
|
||||||
|
|
||||||
|
Maybe you're still interested in using the one_line_progress_meter feature or perhaps
|
||||||
|
have implemented your own progress meter in your window.
|
||||||
|
|
||||||
|
Using the write_event_value method enables you to easily do either of these.
|
||||||
|
|
||||||
|
Copyright 2021 PySimpleGUI
|
||||||
|
"""
|
||||||
|
|
||||||
|
DL_START_KEY = '-START DOWNLOAD-'
|
||||||
|
DL_COUNT_KEY = '-COUNT-'
|
||||||
|
DL_END_KEY = '-END DOWNLOAD-'
|
||||||
|
|
||||||
|
|
||||||
|
def the_thread(window:sg.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
|
||||||
|
"""
|
||||||
|
max_value = random.randint(50, 100)
|
||||||
|
window.write_event_value(DL_START_KEY, max_value) # Data sent is a tuple of thread name and counter
|
||||||
|
for i in range(max_value):
|
||||||
|
time.sleep(.1)
|
||||||
|
window.write_event_value(DL_COUNT_KEY, i) # Data sent is a tuple of thread name and counter
|
||||||
|
window.write_event_value(DL_END_KEY, max_value) # Data sent is a tuple of thread name and counter
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
layout = [ [sg.Text('My Window')],
|
||||||
|
[sg.ProgressBar(100, 'h', size=(30,20), k='-PROGRESS-')],
|
||||||
|
[sg.Button('Go'), sg.Button('Exit')] ]
|
||||||
|
|
||||||
|
window = sg.Window('Window Title', layout, finalize=True)
|
||||||
|
window.read(timeout=0)
|
||||||
|
window.move(window.current_location()[0], window.current_location()[1]-300)
|
||||||
|
downloading, max_value = False, 0
|
||||||
|
|
||||||
|
while True: # Event Loop
|
||||||
|
event, values = window.read()
|
||||||
|
# print(event, values)
|
||||||
|
if event == sg.WIN_CLOSED or event == 'Exit':
|
||||||
|
break
|
||||||
|
if event == 'Go' and not downloading:
|
||||||
|
threading.Thread(target=the_thread, args=(window,), daemon=True).start()
|
||||||
|
elif event == DL_START_KEY:
|
||||||
|
max_value = values[event]
|
||||||
|
downloading = True
|
||||||
|
sg.one_line_progress_meter(f'Downloading {max_value} segments', 0, max_value, 1, f'Downloading {max_value} segments', )
|
||||||
|
window['-PROGRESS-'].update(0, max_value)
|
||||||
|
elif event == DL_COUNT_KEY:
|
||||||
|
sg.one_line_progress_meter(f'Downloading {max_value} segments', values[event]+1, max_value, 1, f'Downloading {max_value} segments')
|
||||||
|
window['-PROGRESS-'].update(values[event]+1, max_value)
|
||||||
|
elif event == DL_END_KEY:
|
||||||
|
downloading = False
|
||||||
|
|
||||||
|
window.close()
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
Loading…
Reference in New Issue