Most complete "Desktop Widget" design pattern. Can choose the theme, alpha channel, location, and it's all saved in the settings file for the future sessions. 99 lines... not bad for 99 lines.....
This commit is contained in:
parent
ebae350c1f
commit
799ce7c9c1
|
@ -17,45 +17,83 @@ 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':
|
||||
|
@ -73,9 +111,19 @@ def main(location):
|
|||
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()
|
||||
|
||||
|
|
Loading…
Reference in New Issue