Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
84 changes: 66 additions & 18 deletions DemoPrograms/Demo_Desktop_Widget_Days_Counter.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,65 +17,113 @@
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)]]

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=[[''], ['Choose Date', 'Choose Title', 'Edit Me', 'Refresh', 'Show Refresh', 'Hide Refresh', 'Exit']])

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()

Expand Down