Merge pull request #4071 from PySimpleGUI/Dev-latest

Dev latest
This commit is contained in:
PySimpleGUI 2021-03-18 21:35:53 -04:00 committed by GitHub
commit dc133859a4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 66 additions and 18 deletions

View File

@ -17,65 +17,113 @@ import datetime
ALPHA = 0.9
THEME = 'Dark green 3'
# May add ability to change theme from the user interface. For now forcing to constant
sg.user_settings_set_entry('-theme-', THEME)
GSIZE = (160, 160)
UPDATE_FREQUENCY_MILLISECONDS = 1000*60*60 # update every hour
def main(location):
def choose_theme(location):
layout = [
[sg.Text('Try a theme')],
[sg.Listbox(values=sg.theme_list(), size=(20, 20), key='-LIST-', enable_events=True)],
[sg.OK(), sg.Cancel()]]
window = sg.Window('Look and Feel Browser', layout, location=location)
old_theme = sg.theme()
while True: # Event Loop
event, values = window.read()
if event in (sg.WIN_CLOSED, 'Exit', 'OK', 'Cancel'):
break
sg.theme(values['-LIST-'][0])
test_window=make_window(location=(location[0]-200, location[1]), test_window=True)
test_window.read(close=True)
if sg.popup_yes_no(f'Do you want to keep {values["-LIST-"]}?', location=location) == 'Yes':
break
window.close()
if event not in ('Cancel', sg.WIN_CLOSED) and values['-LIST-']:
sg.theme(values['-LIST-'][0])
sg.user_settings_set_entry('-theme-', values['-LIST-'][0])
return values['-LIST-'][0]
else:
sg.theme(old_theme)
return None
def make_window(location, test_window=False):
title = sg.user_settings_get_entry('-title-', '')
# May add ability to change theme from the user interface. For now use constant
theme = sg.user_settings_get_entry('-theme-', THEME)
sg.theme(theme)
if not test_window:
theme = sg.user_settings_get_entry('-theme-', THEME)
sg.theme(theme)
alpha = sg.user_settings_get_entry('-alpha-', ALPHA)
font = 'Courier 70'
title_font = 'Courier 8'
refresh_font = 'Courier 8'
refresh_font = title_font = 'Courier 8'
layout = [
[sg.Text(title, size=(20,1), font=title_font, justification='c', k='-TITLE-')],
[sg.Text(size=(3,1), font=font, k='-T-', justification='c')],
[sg.pin(sg.Text(size=(15,2), font=refresh_font, k='-REFRESHED-', justification='c'))],
]
[sg.Text('0', size=(3,1), font=font, k='-T-', justification='c', enable_events=test_window)]]
window = sg.Window('Day Number', layout, location=location, no_titlebar=True, grab_anywhere=True, margins=(0, 0), element_justification='c', element_padding=(0, 0), alpha_channel=ALPHA, finalize=True, right_click_menu=[[''], ['Choose Date', 'Choose Title', 'Edit Me', 'Refresh', 'Show Refresh', 'Hide Refresh', 'Exit']])
if test_window:
layout += [[sg.Text('Click to close', font=title_font)]]
right_click_menu = [[''], ['Choose Date', 'Exit']]
else:
right_click_menu = [[''], ['Choose Date', 'Choose Title', 'Edit Me', 'Theme', 'Save Location', 'Refresh', 'Show Refresh', 'Hide Refresh', 'Alpha', [str(x) for x in range(1,11)],'Exit', ]]
layout += [[sg.pin(sg.Text(size=(15,2), font=refresh_font, k='-REFRESHED-', justification='c'))]]
window = sg.Window('Day Number', layout, location=location, no_titlebar=True, grab_anywhere=True, margins=(0, 0), element_justification='c', element_padding=(0, 0), alpha_channel=alpha, finalize=True, right_click_menu=right_click_menu)
window['-REFRESHED-'].update(visible=sg.user_settings_get_entry('-show refresh-', True))
return window
def main(location):
loc = sg.user_settings_get_entry('-location-', location)
window = make_window(loc)
saved_date = sg.user_settings_get_entry('-start date-', (1,1,2021))
start_date = datetime.datetime(saved_date[2], saved_date[0], saved_date[1])
window['-REFRESHED-'].update(visible=sg.user_settings_get_entry('-show refresh-', True))
while True: # Event Loop
# First update the status information
now = datetime.datetime.now()
delta =now-start_date
delta = datetime.datetime.now() - start_date
window['-T-'].update(f'{delta.days}')
# for debugging show the last update date time
date_time = now.strftime("%m/%d/%Y\n%I:%M:%S %p")
window['-REFRESHED-'].update(f'{date_time}')
window['-REFRESHED-'].update(datetime.datetime.now().strftime("%m/%d/%Y\n%I:%M:%S %p"))
# -------------- Start of normal event loop --------------
event, values = window.read(timeout=UPDATE_FREQUENCY_MILLISECONDS)
print(event, values)
if event == sg.WIN_CLOSED or event == 'Exit':
break
if event == 'Edit Me':
sg.execute_editor(__file__)
elif event == 'Choose Date':
new_start = sg.popup_get_date()
new_start = sg.popup_get_date(location=window.current_location())
if new_start is not None:
start_date = datetime.datetime(new_start[2], new_start[0], new_start[1])
sg.user_settings_set_entry('-start date-', new_start)
elif event == 'Choose Title':
new_title = sg.popup_get_text('Choose a title for your date')
new_title = sg.popup_get_text('Choose a title for your date', location=window.current_location())
if new_title is not None:
window['-TITLE-'].update(new_title)
sg.user_settings_set_entry('-title-', new_title)
elif event == 'Show Refresh':
window['-REFRESHED-'].update(visible=True)
sg.user_settings_set_entry('-show refresh-', True)
elif event == 'Save Location':
sg.user_settings_set_entry('-location-', window.current_location())
elif event == 'Hide Refresh':
window['-REFRESHED-'].update(visible=False)
sg.user_settings_set_entry('-show refresh-', False)
elif event in [str(x) for x in range(1,11)]:
window.set_alpha(int(event)/10)
sg.user_settings_set_entry('-alpha-', int(event)/10)
elif event == 'Theme':
loc = window.current_location()
if choose_theme(loc) is not None:
# this is result of hacking code down to 99 lines in total. Not tried it before. Interesting test.
_, window = window.close(), make_window(loc)
window.close()