From 4bba64d34f5703ecc0ddcb98e4ee181b905a7cb7 Mon Sep 17 00:00:00 2001 From: PySimpleGUI Date: Fri, 15 Apr 2022 07:52:39 -0400 Subject: [PATCH] New Demo Program - create custom themes and save in user settings file --- ...Demo_Theme_Custom_Saved_In_UserSettings.py | 79 +++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 DemoPrograms/Demo_Theme_Custom_Saved_In_UserSettings.py diff --git a/DemoPrograms/Demo_Theme_Custom_Saved_In_UserSettings.py b/DemoPrograms/Demo_Theme_Custom_Saved_In_UserSettings.py new file mode 100644 index 00000000..e5b9158b --- /dev/null +++ b/DemoPrograms/Demo_Theme_Custom_Saved_In_UserSettings.py @@ -0,0 +1,79 @@ +import PySimpleGUI as sg + +""" + Demo of using User Settings to create and store your own personal PySimpleGUI themes + + There are 2 operations + 1. Initialize your settings file. You would normally only do this once and perhaps + write a simple program to administer it or you can also edit the JSON file directly + 2. Use your settings file. Add the code to the top of all of your applications that you want + to have access to your selection of custom themes + + Copyright 2022 PySimpleGUI.org +""" + +def init_your_settings(): + DarkGrey20 = {'BACKGROUND': '#19232D', + 'TEXT': '#ffffff', + 'INPUT': '#32414B', + 'TEXT_INPUT': '#ffffff', + 'SCROLL': '#505F69', + 'BUTTON': ('#ffffff', '#32414B'), + 'PROGRESS': ('#505F69', '#32414B'), + 'BORDER': 1, 'SLIDER_DEPTH': 0, 'PROGRESS_DEPTH': 0, + } + + DarkGrey21 = {'BACKGROUND': '#121212', + 'TEXT': '#dddddd', + 'INPUT': '#1e1e1e', + 'TEXT_INPUT': '#dbdcd9', + 'SCROLL': '#272727', + 'BUTTON': ('#69b1ef', '#2e2e2e'), + 'PROGRESS': ('#69b1ef', '#2e2e2e'), + 'BORDER': 1, 'SLIDER_DEPTH': 0, 'PROGRESS_DEPTH': 0, + } + # Set up my app settings file... start with an empty one to be sure + sg.user_settings_delete_filename('my_awesome_apps') + sg.user_settings_filename('my_awesome_apps') + # Add the theme dictionaries + sg.user_settings_set_entry('Dark Gray 20', DarkGrey20) + sg.user_settings_set_entry('Dark Gray 21', DarkGrey21) + sg.user_settings_set_entry('-theme list-', ('Dark Gray 20', 'Dark Gray 21')) + sg.popup_quick_message('Your settings file has been created and is ready to be used', background_color='#1c1e23', text_color='white', keep_on_top=True, font='_ 30') + + +def use_your_settings(): + sg.user_settings_filename('my_awesome_apps') + + default_theme_name = sg.user_settings_get_entry('-theme default-', None) + + # Only need this section is you want this app to allow user to select the default theme + # Could also auto-choose the first theme in the list for them + if default_theme_name is None: + default_theme_list = sg.user_settings_get_entry('-theme list-', None) + event, values = sg.Window('Choose a theme', [[sg.T('Your settings do not have a default theme chosen so please choose one')],[sg.Combo(default_theme_list, key='-THEME-', readonly=True, enable_events=True)]]).read( + close=True) + if event == sg.WIN_CLOSED: + sg.popup_error('No theme chosen so exiting') + exit() + default_theme_name = values[event] + sg.user_settings_set_entry('-theme default-', default_theme_name) + + my_theme = sg.user_settings_get_entry(default_theme_name, None) + sg.theme_add_new(default_theme_name, my_theme) + + # Switch your theme to use the newly added one + sg.theme(default_theme_name) + + # Test out the theme + sg.popup_get_text(f'My theme is {default_theme_name} looks like this.', image=sg.EMOJI_BASE64_HAPPY_THUMBS_UP) + +if __name__ == '__main__': + operations = ('Initialize your settings (must do first)', 'Use your settings') + event, values = sg.Window('Choose an operation', [[sg.T('Choose an operation to perform')],[sg.Combo(operations, key='-OPERATION-', readonly=True, enable_events=True)]]).read(close=True) + if event == sg.WIN_CLOSED: + sg.popup_error('No operation chosen so exiting') + elif values[event] == operations[0]: + init_your_settings() + elif values[event] == operations[1]: + use_your_settings()