commit
						ffd86889e0
					
				
					 2 changed files with 112 additions and 20 deletions
				
			
		|  | @ -40,7 +40,7 @@ def get_demo_git_files(): | |||
|     :rtype: Tuple[List[str], List[str]] | ||||
|     """ | ||||
| 
 | ||||
|     demo_path = sg.user_settings_get_entry('-demos folder-', '.') | ||||
|     demo_path = get_demo_path() | ||||
| 
 | ||||
|     try: | ||||
|         demo_files = os.listdir(demo_path) | ||||
|  | @ -50,6 +50,29 @@ def get_demo_git_files(): | |||
|     return demo_files | ||||
| 
 | ||||
| 
 | ||||
| def get_demo_path(): | ||||
|     demo_path = sg.user_settings_get_entry('-demos folder-', os.path.dirname(__file__)) | ||||
| 
 | ||||
|     return demo_path | ||||
| 
 | ||||
| 
 | ||||
| def get_editor(): | ||||
|     try:    # in case running with old version of PySimpleGUI that doesn't have a global PSG settings path | ||||
|         if sg.pysimplegui_user_settings: | ||||
|             global_editor = sg.pysimplegui_user_settings.get('-editor program-') | ||||
|         else: | ||||
|             global_editor = '' | ||||
|     except: | ||||
|         global_editor = '' | ||||
| 
 | ||||
|     return sg.user_settings_get_entry('-editor program-', global_editor) | ||||
| 
 | ||||
| 
 | ||||
| def get_theme(): | ||||
|     global_theme = sg.theme() | ||||
| 
 | ||||
|     return sg.user_settings_get_entry('-theme-', global_theme) | ||||
| 
 | ||||
| def find_in_file(string): | ||||
|     """ | ||||
|     Search through the demo files for a string. | ||||
|  | @ -60,7 +83,7 @@ def find_in_file(string): | |||
|     :rtype: List[str] | ||||
|     """ | ||||
| 
 | ||||
|     demo_path = sg.user_settings_get_entry('-demos folder-') | ||||
|     demo_path = get_demo_path() | ||||
|     demo_files = get_demo_git_files() | ||||
|     string = string.lower() | ||||
|     file_list = [] | ||||
|  | @ -88,11 +111,13 @@ def settings_window(): | |||
|     :rtype: (bool) | ||||
|     """ | ||||
| 
 | ||||
|     editor_program = get_editor() | ||||
| 
 | ||||
|     layout = [[sg.T('Program Settings', font='DEFAIULT 18')], | ||||
|               [sg.T('Path to Demos', size=(20,1)), sg.In(sg.user_settings_get_entry('-demos folder-', '.'), k='-DEMOS-'), sg.FolderBrowse()], | ||||
|               [sg.T('Editor Program', size=(20,1)), sg.In(sg.user_settings_get_entry('-Editor Program-', ''),k='-EDITOR PROGRAM-'), sg.FileBrowse()], | ||||
|               [sg.T('Editor Program', size=(20,1)), sg.In(sg.user_settings_get_entry('-editor program-', editor_program),k='-EDITOR PROGRAM-'), sg.FileBrowse()], | ||||
|               [sg.T(r"For PyCharm, Add this to your PyCharm main program's folder \bin\pycharm.bat")], | ||||
|               [sg.Combo(sg.theme_list(), sg.user_settings_get_entry('-theme-', None), k='-THEME-')], | ||||
|               [sg.Combo(['']+sg.theme_list(), sg.user_settings_get_entry('-theme-', None), k='-THEME-')], | ||||
|               [sg.B('Ok', bind_return_key=True), sg.B('Cancel')], | ||||
|               ] | ||||
| 
 | ||||
|  | @ -100,8 +125,10 @@ def settings_window(): | |||
|     event, values = window.read(close=True) | ||||
|     if event == 'Ok': | ||||
|         sg.user_settings_set_entry('-demos folder-', values['-DEMOS-']) | ||||
|         sg.user_settings_set_entry('-Editor Program-', values['-EDITOR PROGRAM-']) | ||||
|         sg.user_settings_set_entry('-theme-', values['-THEME-']) | ||||
|         new_editor = global_editor if not values['-EDITOR PROGRAM-'] else values['-EDITOR PROGRAM-'] | ||||
|         sg.user_settings_set_entry('-editor program-', new_editor) | ||||
|         new_theme = sg.theme_global() if values['-THEME-'] == '' else values['-THEME-'] | ||||
|         sg.user_settings_set_entry('-theme-', new_theme) | ||||
|         return True | ||||
| 
 | ||||
|     return False | ||||
|  | @ -114,7 +141,8 @@ def make_window(): | |||
|     :rtype: (Window) | ||||
|     """ | ||||
| 
 | ||||
|     theme = sg.user_settings_get_entry('-theme-') | ||||
|     theme = get_theme() | ||||
|     editor = get_editor() | ||||
|     demo_files = get_demo_git_files() | ||||
|     if not theme: | ||||
|         theme = sg.OFFICIAL_PYSIMPLEGUI_THEME | ||||
|  | @ -159,10 +187,9 @@ def main(): | |||
|     It will call the make_window function to create the window. | ||||
|     """ | ||||
| 
 | ||||
|     demo_path = sg.user_settings_get_entry('-demos folder-', '.') | ||||
|     editor_program = sg.user_settings_get_entry('-Editor Program-', '') | ||||
|     demo_path = get_demo_path() | ||||
|     editor_program = get_editor() | ||||
|     demo_files = get_demo_git_files() | ||||
| 
 | ||||
|     window = make_window() | ||||
| 
 | ||||
|     while True: | ||||
|  | @ -171,12 +198,12 @@ def main(): | |||
|             break | ||||
|         if event == 'Edit': | ||||
|             for file in values['-DEMO LIST-']: | ||||
|                 sg.cprint(f'opening (in editor)', text_color='white', background_color='red', end='') | ||||
|                 sg.cprint(f'Editing using {editor_program}', text_color='white', background_color='red', end='') | ||||
|                 sg.cprint('') | ||||
|                 sg.cprint(f'{os.path.join(demo_path, file)}', text_color='white', background_color='purple') | ||||
|                 execute_command_subprocess(f'{editor_program}', os.path.join(demo_path, file)) | ||||
|         elif event == 'Run': | ||||
|             sg.cprint('Running Demo Programs....', c='white on green', end='') | ||||
|             sg.cprint('Running....', c='white on green', end='') | ||||
|             sg.cprint('') | ||||
|             for file in values['-DEMO LIST-']: | ||||
|                 sg.cprint(os.path.join(demo_path, file),text_color='white', background_color='purple') | ||||
|  | @ -200,9 +227,10 @@ def main(): | |||
|             if settings_window() is True: | ||||
|                 window.close() | ||||
|                 window = make_window() | ||||
|                 demo_path = sg.user_settings_get_entry('-demos folder-') | ||||
|                 editor_program = sg.user_settings_get_entry('-Editor Program-') | ||||
|                 demo_path = get_demo_path() | ||||
|                 editor_program = get_editor() | ||||
|                 demo_files = get_demo_git_files() | ||||
|                 theme = get_theme() | ||||
|         elif event == 'Clear': | ||||
|             window['-FILTER-'].update('') | ||||
|             window['-FIND-'].update('') | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| #!/usr/bin/python3 | ||||
| version = __version__ = "4.34.0.9 Unreleased\nSDK Help Expanded to init & update parms, SDK Help function search, files_delimiter added to FilesBrowse & popup_get_file, SDK help sort by case, popup_get_file fixed default_extension not being passed to button correctly, changed themes so that spaces can be used in defined name, addition of subprocess non-blocking launcher, fix for Debug button color, set_option for default user_settings path to override normal default, define a truly global PySimpleGUI settings path" | ||||
| version = __version__ = "4.34.0.9 Unreleased\nSDK Help Expanded to init & update parms, SDK Help function search, files_delimiter added to FilesBrowse & popup_get_file, SDK help sort by case, popup_get_file fixed default_extension not being passed to button correctly, changed themes so that spaces can be used in defined name, addition of subprocess non-blocking launcher, fix for Debug button color, set_option for default user_settings path to override normal default, define a truly global PySimpleGUI settings path, theme_global() gets the theme for all progams" | ||||
| 
 | ||||
| __version__ = version.split()[0]    # For PEP 396 and PEP 345 | ||||
| 
 | ||||
|  | @ -542,6 +542,7 @@ DEFAULT_USER_SETTINGS_MAC_PATH =r'~/Library/Application Support/PySimpleGUI/sett | |||
| DEFAULT_USER_SETTINGS_UNKNOWN_OS_PATH =r'~/Library/Application Support/PySimpleGUI/settings' | ||||
| DEFAULT_USER_SETTINGS_PATH = None       # value set by user to override all paths above | ||||
| DEFAULT_USER_SETTINGS_PYSIMPLEGUI_PATH = None       # location of the global PySimpleGUI settings | ||||
| DEFAULT_USER_SETTINGS_PYSIMPLEGUI_FILENAME = '_PySimpleGUI_settings_global_.json'       # location of the global PySimpleGUI settings | ||||
| 
 | ||||
| # ====================================================================== # | ||||
| # One-liner functions that are handy as f_ck                             # | ||||
|  | @ -14201,7 +14202,7 @@ def set_options(icon=None, button_color=None, element_size=(None, None), button_ | |||
|                text_justification=None, background_color=None, element_background_color=None, | ||||
|                text_element_background_color=None, input_elements_background_color=None, input_text_color=None, | ||||
|                scrollbar_color=None, text_color=None, element_text_color=None, debug_win_size=(None, None), | ||||
|                window_location=(None, None), error_button_color=(None, None), tooltip_time=None, tooltip_font=None, use_ttk_buttons=None, ttk_theme=None, suppress_error_popups=None, suppress_raise_key_errors=None, suppress_key_guessing=None, enable_treeview_869_patch=None, enable_mac_notitlebar_patch=None, use_custom_titlebar=None, titlebar_background_color=None, titlebar_text_color=None, titlebar_font=None, titlebar_icon=None, user_settings_path=None, pysimplegui_settings_path=None): | ||||
|                window_location=(None, None), error_button_color=(None, None), tooltip_time=None, tooltip_font=None, use_ttk_buttons=None, ttk_theme=None, suppress_error_popups=None, suppress_raise_key_errors=None, suppress_key_guessing=None, enable_treeview_869_patch=None, enable_mac_notitlebar_patch=None, use_custom_titlebar=None, titlebar_background_color=None, titlebar_text_color=None, titlebar_font=None, titlebar_icon=None, user_settings_path=None, pysimplegui_settings_path=None, pysimplegui_settings_filename=None): | ||||
|     """ | ||||
|     :param icon: filename or base64 string to be used for the window's icon | ||||
|     :type icon: bytes | str | ||||
|  | @ -14299,6 +14300,8 @@ def set_options(icon=None, button_color=None, element_size=(None, None), button_ | |||
|     :type user_settings_path: (str) | ||||
|     :param pysimplegui_settings_path: default path for the global PySimpleGUI user_settings | ||||
|     :type pysimplegui_settings_path: (str) | ||||
|     :param pysimplegui_settings_filename: default filename for the global PySimpleGUI user_settings | ||||
|     :type pysimplegui_settings_filename: (str) | ||||
|     :return: None | ||||
|     :rtype: None | ||||
|     """ | ||||
|  | @ -14350,7 +14353,8 @@ def set_options(icon=None, button_color=None, element_size=(None, None), button_ | |||
|     global CUSTOM_TITLEBAR_FONT | ||||
|     global DEFAULT_USER_SETTINGS_PATH | ||||
|     global DEFAULT_USER_SETTINGS_PYSIMPLEGUI_PATH | ||||
| 
 | ||||
|     global DEFAULT_USER_SETTINGS_PYSIMPLEGUI_FILENAME | ||||
|     global _pysimplegui_user_settings | ||||
|     # global _my_windows | ||||
| 
 | ||||
|     if icon: | ||||
|  | @ -14499,6 +14503,13 @@ def set_options(icon=None, button_color=None, element_size=(None, None), button_ | |||
|     if pysimplegui_settings_path is not None: | ||||
|         DEFAULT_USER_SETTINGS_PYSIMPLEGUI_PATH = pysimplegui_settings_path | ||||
| 
 | ||||
|     if pysimplegui_settings_filename is not None: | ||||
|         DEFAULT_USER_SETTINGS_PYSIMPLEGUI_FILENAME = pysimplegui_settings_filename | ||||
| 
 | ||||
|     if pysimplegui_settings_filename is not None or pysimplegui_settings_filename is not None: | ||||
|         _pysimplegui_user_settings = UserSettings(filename=DEFAULT_USER_SETTINGS_PYSIMPLEGUI_FILENAME, | ||||
|                                                   path=DEFAULT_USER_SETTINGS_PYSIMPLEGUI_PATH) | ||||
| 
 | ||||
|     return True | ||||
| 
 | ||||
| 
 | ||||
|  | @ -14895,6 +14906,20 @@ def theme_add_new(new_theme_name, new_theme_dict): | |||
|         print('Exception during adding new theme {}'.format(e)) | ||||
| 
 | ||||
| 
 | ||||
| def theme_global(new_theme=None): | ||||
|     """ | ||||
|     Sets / Gets the global PySimpleGUI Theme.  If none is specified then returns the global theme from user settings | ||||
| 
 | ||||
|     :param new_theme: the new theme name to use | ||||
|     :type new_theme: (str) | ||||
|     :return: the currently selected theme | ||||
|     :rtype: (str) | ||||
|     """ | ||||
|     if new_theme is not None: | ||||
|         pysimplegui_user_settings.set('-theme-', new_theme) | ||||
|         return new_theme | ||||
|     else: | ||||
|         return pysimplegui_user_settings.get('-theme-', CURRENT_LOOK_AND_FEEL) | ||||
| 
 | ||||
| 
 | ||||
| def theme_previewer(columns=12, scrollable=False, scroll_area_size=(None, None), search_string=None, location=(None, None)): | ||||
|  | @ -17104,13 +17129,15 @@ class UserSettings: | |||
|         :type key: (Any) | ||||
|         :param value: Value to save as the setting's value. Can be anything | ||||
|         :type value: (Any) | ||||
|         :return: value that key was set to | ||||
|         :rtype: (Any) | ||||
|         """ | ||||
|         if self.full_filename is None: | ||||
|             self.set_location() | ||||
|         self.read() | ||||
|         self.dict[key] = value | ||||
|         self.save() | ||||
| 
 | ||||
|         return value | ||||
| 
 | ||||
|     def get(self, key, default=None): | ||||
|         """ | ||||
|  | @ -18229,6 +18256,35 @@ def main_get_debug_data(suppress_popup=False): | |||
| 
 | ||||
|     return message | ||||
| 
 | ||||
| def main_global_pysimplegui_settings(): | ||||
|     """ | ||||
|     Window to set settings that will be used across all PySimpleGUI programs that choose to use them. | ||||
|     Use set_options to set the path to the folder for all PySimpleGUI settings. | ||||
| 
 | ||||
|     :return: True if settings were changed | ||||
|     :rtype: (bool) | ||||
|     """ | ||||
| 
 | ||||
|     settings = pysimplegui_user_settings.read() | ||||
| 
 | ||||
|     layout = [[T('Global PySimpleGUI Settings', font='DEFAIULT 18')], | ||||
|               [T('Editor Program', size=(20,1)), In(settings.get('-editor program-', ''),k='-EDITOR PROGRAM-'), FileBrowse()], | ||||
|               [T(r"For PyCharm, Add this to your PyCharm main program's folder \bin\pycharm.bat")], | ||||
|               [T('Default Theme For All Programs:'), Combo([''] + theme_list(), settings.get('-theme-', None), k='-THEME-')], | ||||
|               [B('Ok', bind_return_key=True), B('Cancel')], | ||||
|               ] | ||||
| 
 | ||||
|     window = Window('Settings', layout, keep_on_top=True) | ||||
|     event, values = window.read(close=True) | ||||
|     if event == 'Ok': | ||||
|         new_theme = OFFICIAL_PYSIMPLEGUI_THEME if values['-THEME-'] == '' else values['-THEME-'] | ||||
|         pysimplegui_user_settings.set('-editor program-', values['-EDITOR PROGRAM-']) | ||||
|         pysimplegui_user_settings.set('-theme-', new_theme) | ||||
|         return True | ||||
|     return False | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| def main_sdk_help(): | ||||
|     """ | ||||
|     Display a window that will display the docstrings for each PySimpleGUI Element and the Window object | ||||
|  | @ -18498,6 +18554,7 @@ I hope you are enjoying using PySimpleGUI whether you sponsor the product or not | |||
|          Button('ttk Button', use_ttk_buttons=True, tooltip='This is a TTK Button'), | ||||
|          Button('See-through Mode', tooltip='Make the background transparent'), | ||||
|          Button('Upgrade PySimpleGUI from GitHub', button_color='white on red', key='-INSTALL-'), | ||||
|          Button('Global Settings', tooltip='Settings across all PySimpleGUI programs'), | ||||
|          Button('Exit', tooltip='Exit button')], | ||||
|         [ B(image_data=ICON_BUY_ME_A_COFFEE, key='-COFFEE-'), | ||||
|           B('Themes'), B('Theme Swatches'), B('Switch Themes'),B('SDK Reference'), B('Info for GitHub'), | ||||
|  | @ -18592,6 +18649,12 @@ def main(): | |||
|             window['-HIDE TABS-'].update(text=SYMBOL_UP if window['-TAB GROUP-'].metadata else SYMBOL_DOWN) | ||||
|         elif event == 'SDK Reference': | ||||
|             main_sdk_help() | ||||
|         elif event == 'Global Settings': | ||||
|             if main_global_pysimplegui_settings(): | ||||
|                 theme(pysimplegui_user_settings.get('-theme-', OFFICIAL_PYSIMPLEGUI_THEME)) | ||||
|                 window.close() | ||||
|                 window = _create_main_window() | ||||
|                 graph_elem = window['+GRAPH+'] | ||||
|         elif event.startswith('P '): | ||||
|             if event == 'P ': | ||||
|                 popup('Normal Popup - Modal', keep_on_top=True) | ||||
|  | @ -18663,9 +18726,10 @@ TimerStop = timer_stop | |||
| test = main | ||||
| sdk_help = main_sdk_help | ||||
| 
 | ||||
| 
 | ||||
| pysimplegui_user_settings = UserSettings(filename=DEFAULT_USER_SETTINGS_PYSIMPLEGUI_FILENAME, path=DEFAULT_USER_SETTINGS_PYSIMPLEGUI_PATH) | ||||
| #------------------------ Set the "Official PySimpleGUI Theme Colors" ------------------------ | ||||
| theme(CURRENT_LOOK_AND_FEEL) | ||||
| 
 | ||||
| theme(theme_global()) | ||||
| 
 | ||||
| # See if running on Trinket. If Trinket, then use custom titlebars since Trinket doesn't supply any | ||||
| if _running_trinket(): | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue