New Demo Program using new Window.timer_stop and Window.timer_stop

This commit is contained in:
PySimpleGUI 2022-12-27 07:32:30 -05:00
parent 560ab62e88
commit 747ff76d08
1 changed files with 74 additions and 0 deletions

View File

@ -0,0 +1,74 @@
#!/usr/bin/env python
import PySimpleGUI as sg
import time
"""
Demo Program - Timer Desktop Widget using Window.timer_start and Window.timer_stop
This is a re-implementation of the original timer desktop widget that used window.read timeouts as
the means of getting timer events.
This program uses the new Window.timer_start to get timer events. It is simpler because:
There is only 1 call to window.read and it's in the standard location in the event loop
The timer pause/run button uses the timer_start and timer_stop calls - perhaps more intuitive
Note that this Demo Program requires PySimpleGUI 4.60.4.132 and greater
Copyright 2022 PySimpleGUI
"""
def time_as_int():
return int(round(time.time() * 100))
# ---------------- Create Form ----------------
sg.theme('Black')
layout = [[sg.Text('')],
[sg.Text('', size=(8, 2), font=('Helvetica', 20),
justification='center', key='text')],
[sg.Button('Pause', key='-RUN-PAUSE-', button_color=('white', '#001480')),
sg.Button('Reset', button_color=('white', '#007339'), key='-RESET-'),
sg.Exit(button_color=('white', 'firebrick4'), key='Exit')]]
window = sg.Window('Running Timer', layout,
no_titlebar=True,
auto_size_buttons=False,
keep_on_top=True,
grab_anywhere=True,
element_padding=(0, 0),
finalize=True,
element_justification='c',
right_click_menu=sg.MENU_RIGHT_CLICK_EDITME_EXIT)
current_time, paused_time, paused = 0, 0, False
start_time = time_as_int()
timer_id = window.timer_start(10)
while True:
event, values = window.read()
if event in (sg.WIN_CLOSED, 'Exit'): # ALWAYS give a way out of program
break
# --------- Handle events --------
if event == '-RUN-PAUSE-':
paused = not paused
if paused:
window.timer_stop(timer_id)
paused_time = time_as_int()
else:
timer_id = window.timer_start(10)
start_time = start_time + time_as_int() - paused_time
window['-RUN-PAUSE-'].update('Run' if paused else 'Pause')
elif event == sg.EVENT_TIMER:
current_time = time_as_int() - start_time
if event == '-RESET-':
current_time = 0
start_time = paused_time = time_as_int()
elif event == 'Edit Me':
sg.execute_editor(__file__)
# --------- Display timer_id in window --------
window['text'].update('{:02d}:{:02d}.{:02d}'.format((current_time // 100) // 60,
(current_time // 100) % 60,
current_time % 100))
window.close()