Demo program of an example window to choose a time

This commit is contained in:
PySimpleGUI 2023-01-06 15:49:00 -05:00
parent ca26ac8f37
commit 86976f50c3
1 changed files with 77 additions and 0 deletions

View File

@ -0,0 +1,77 @@
import PySimpleGUI as sg
"""
Demo Time Chooser
A sample window for choosing a time.
This particular implementation uses a Spin element. Numerous possibilities exist for entering a time of day. Instead
of Spin elements, Input or Combo Elements could be used.
If you do not want your user to be able to manually enter values using the keyboard, then set readonly=True in
the Spin elements.
Copyright 2023 PySimpleGUI
"""
def popup_get_time(title='Time Entry', starting_hour=1, starting_minute=0, font=None):
"""
Shows a window that will gather a time of day.
:param title: The title that is shown on the window
:type title: str
:param starting_hour: Value to initially show in the hour field
:type starting_hour: int
:param starting_minute: Value to initially show in the minute field
:type starting_minute: int
:param font: Font to use for the window
:type font: str | tuple
:return: Tuple with format: (hour, minute, am-pm string)
:type: (int, int, str)
"""
max_value_dict = {'-HOUR-':(1, 12), '-MIN-':(0, 59)}
hour_list = [i for i in range(0, 15)]
minute_list = [i for i in range(-1, 62)]
layout = [[sg.Spin(hour_list, initial_value=starting_hour, key='-HOUR-', s=3, enable_events=True, readonly=False),
sg.Text(':'),
sg.Spin(minute_list, initial_value=starting_minute, key='-MIN-', s=3, enable_events=True, readonly=False),
sg.Combo(['AM', 'PM'], 'AM', readonly=True, key='-AMPM-')],
[sg.Button('Ok'), sg.Button('Cancel')]]
window = sg.Window(title, layout, font=font)
while True:
event, values = window.read()
# print(event, values)
if event == sg.WIN_CLOSED or event == 'Cancel':
hours = minutes = ampm = None
break
if event == '-HOUR-' or event == '-MIN-':
spin_value = values[event]
if spin_value > max_value_dict[event][1]:
values[event] = max_value_dict[event][0]
window[event].update(values[event])
elif spin_value < max_value_dict[event][0]:
values[event] = max_value_dict[event][1]
window[event].update(values[event])
if event == 'Ok':
# Do validation on the input values to ensure they're valid
try:
hours = int(values["-HOUR-"])
minutes = int(values["-MIN-"])
ampm = values["-AMPM-"]
except:
continue # if not valid, then don't allow exiting the window using OK.
if 1 <= hours <= 12 and 0 <= minutes < 60: # make sure the hour and minute values are in a valid range
break
window.close()
return hours, minutes, ampm
print(popup_get_time(font='_ 15'))