From 2974a2353ee11cfb27955fc9ee41ac39d66879bf Mon Sep 17 00:00:00 2001 From: PySimpleGUI Date: Sat, 20 Feb 2021 07:51:57 -0500 Subject: [PATCH] Demo one_line_progress_meter - a standalone demo for this capability --- DemoPrograms/Demo_one_line_progress_meter.py | 66 ++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 DemoPrograms/Demo_one_line_progress_meter.py diff --git a/DemoPrograms/Demo_one_line_progress_meter.py b/DemoPrograms/Demo_one_line_progress_meter.py new file mode 100644 index 00000000..c35b73e1 --- /dev/null +++ b/DemoPrograms/Demo_one_line_progress_meter.py @@ -0,0 +1,66 @@ +""" + Demo one_line_progress_meter + + Add 1 line of code, get a very nice graphical progress meter window + + As a software engineer, it's frustrating to know that there is a better way that + are not being shown. Adding a progress meter to your loop does not require 2 lines + of code. It can be done with 1. + + So many of the popular progress meter packages require multiple changes to your code. + There are 2 varieties: + * Add 2 lines of code + 1. Add - A setup outside your loop + 2. Add - A call to a meter update function inside inside your loop + * Modify 1, add 1 + 1. Modify - Your existing for statement to use an iterator made by the meter API + 2. Add - A call to the meter update function inside your loop + + The PySimpleGUI "One Line Progress Meter" requires you to: + * Add - A call to the meter update funciton inside your loop + + + Copyright 2021 PySimpleGUI.org +""" + + +import PySimpleGUI as sg +import time + + + +# --------------------------------- BEFORE --------------------------------- +# Your EXISTING code may look like this + +MAX=100 # the max number of items you'll process +for i in range(MAX): + # Do your processing stuff here (simulated with this sleep) + time.sleep(.1) + print(f'Your old code simply looped through {i}') + + +# --------------------------------- AFTER --------------------------------- +# Now let's add a PySimpleGUI one line progress meter + +MAX=100 # the max number of items you'll process +for i in range(MAX): + # Here is your line of code + sg.one_line_progress_meter('Some test', i+1, MAX) + time.sleep(.1) + print(f'Your new code still simply loops through, but you also get the nifty progress window {i}') + +sg.popup('Done', 'As you can see, the bar auto disappeared', 'because it reached max value') + +# --------------------------------- FANCY --------------------------------- +# What about that "Cancel" button? Let's hook it up + +MAX=100 # the max number of items you'll process +for i in range(MAX): + # This time we're checking to see if the meter stopped. If it stopped early, then it was cancelled. + if not sg.one_line_progress_meter('A Meter You Can Cancel', i+1, MAX, 'KEY', 'Try Clicking Cancel Button') and i+1 != MAX: + sg.popup_auto_close('Cancelling your loop...') + break + time.sleep(.1) + print(f'Your new code still simply loops through, but you also get the nifty progress window {i}') + +sg.popup('Done with your loop!', 'About to exit program') \ No newline at end of file