Added report_error setting for user_settings_delete_file. Global Settings window complete rework to use Tabs. Hoping nothing broke, but just remember things are in flux for a little bit while the ttk scrollbars are finishing up
This commit is contained in:
parent
4bba64d34f
commit
f776589349
103
PySimpleGUI.py
103
PySimpleGUI.py
|
@ -1,6 +1,6 @@
|
||||||
#!/usr/bin/python3
|
#!/usr/bin/python3
|
||||||
|
|
||||||
version = __version__ = "4.59.0.11 Released 5-Apr-2022"
|
version = __version__ = "4.59.0.12 Released 5-Apr-2022"
|
||||||
|
|
||||||
_change_log = """
|
_change_log = """
|
||||||
Changelog since 4.59.0 released to PyPI on 5-Apr-2022
|
Changelog since 4.59.0 released to PyPI on 5-Apr-2022
|
||||||
|
@ -48,6 +48,8 @@ _change_log = """
|
||||||
Ugh .... terrible ttk theme bug! Sorry!!!
|
Ugh .... terrible ttk theme bug! Sorry!!!
|
||||||
4.59.0.11
|
4.59.0.11
|
||||||
Improved TTK theme error reporting
|
Improved TTK theme error reporting
|
||||||
|
4.59.0.12
|
||||||
|
user_settings_delete_filename - added report_error parm giving ability to turn off the error popup (now off by default). The UserSettings object also got this parm
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__version__ = version.split()[0] # For PEP 396 and PEP 345
|
__version__ = version.split()[0] # For PEP 396 and PEP 345
|
||||||
|
@ -21223,7 +21225,7 @@ class UserSettings:
|
||||||
self.read()
|
self.read()
|
||||||
return self.dict
|
return self.dict
|
||||||
|
|
||||||
def delete_file(self, filename=None, path=None):
|
def delete_file(self, filename=None, path=None, report_error=False):
|
||||||
"""
|
"""
|
||||||
Deltes the filename and path for your settings file. Either paramter can be optional.
|
Deltes the filename and path for your settings file. Either paramter can be optional.
|
||||||
If you don't choose a path, one is provided for you that is OS specific
|
If you don't choose a path, one is provided for you that is OS specific
|
||||||
|
@ -21235,15 +21237,17 @@ class UserSettings:
|
||||||
:type filename: (str or None)
|
:type filename: (str or None)
|
||||||
:param path: The folder that the settings file will be stored in. Do not include the filename.
|
:param path: The folder that the settings file will be stored in. Do not include the filename.
|
||||||
:type path: (str or None)
|
:type path: (str or None)
|
||||||
|
:param report_error: Determines if an error should be shown if a delete error happen (i.e. file isn't present)
|
||||||
|
:type report_error: (bool)
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if filename is not None or path is not None or (filename is None and path is None):
|
if filename is not None or path is not None or (filename is None and path is None):
|
||||||
self.set_location(filename=filename, path=path)
|
self.set_location(filename=filename, path=path)
|
||||||
try:
|
try:
|
||||||
os.remove(self.full_filename)
|
os.remove(self.full_filename)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
if not self.silent_on_error:
|
if report_error:
|
||||||
_error_popup_with_traceback('UserSettings delete_file warning ***', 'Exception trying to perform os.remove', e)
|
_error_popup_with_traceback('UserSettings delete_file warning ***', 'Exception trying to perform os.remove', e)
|
||||||
# print(_create_error_message())
|
|
||||||
self.dict = {}
|
self.dict = {}
|
||||||
|
|
||||||
def write_new_dictionary(self, settings_dict):
|
def write_new_dictionary(self, settings_dict):
|
||||||
|
@ -21512,7 +21516,7 @@ def user_settings_filename(filename=None, path=None):
|
||||||
return settings.get_filename(filename, path)
|
return settings.get_filename(filename, path)
|
||||||
|
|
||||||
|
|
||||||
def user_settings_delete_filename(filename=None, path=None):
|
def user_settings_delete_filename(filename=None, path=None, report_error=False):
|
||||||
"""
|
"""
|
||||||
Deltes the filename and path for your settings file. Either paramter can be optional.
|
Deltes the filename and path for your settings file. Either paramter can be optional.
|
||||||
If you don't choose a path, one is provided for you that is OS specific
|
If you don't choose a path, one is provided for you that is OS specific
|
||||||
|
@ -21526,7 +21530,7 @@ def user_settings_delete_filename(filename=None, path=None):
|
||||||
:type path: (str)
|
:type path: (str)
|
||||||
"""
|
"""
|
||||||
settings = UserSettings._default_for_function_interface
|
settings = UserSettings._default_for_function_interface
|
||||||
settings.delete_file(filename, path)
|
settings.delete_file(filename, path, report_error=report_error)
|
||||||
|
|
||||||
|
|
||||||
def user_settings_set_entry(key, value):
|
def user_settings_set_entry(key, value):
|
||||||
|
@ -22464,8 +22468,7 @@ class _Debugger:
|
||||||
self.custom_watch = values['-CUSTOM_WATCH-']
|
self.custom_watch = values['-CUSTOM_WATCH-']
|
||||||
break
|
break
|
||||||
elif event == 'Clear All':
|
elif event == 'Clear All':
|
||||||
popup_quick_message('Cleared Auto Watches', auto_close=True, auto_close_duration=3, non_blocking=True,
|
popup_quick_message('Cleared Auto Watches', auto_close=True, auto_close_duration=3, non_blocking=True, text_color='red', font='ANY 18')
|
||||||
text_color='red', font='ANY 18')
|
|
||||||
for key in sorted_dict:
|
for key in sorted_dict:
|
||||||
window.Element(key).Update(False)
|
window.Element(key).Update(False)
|
||||||
window.Element('-CUSTOM_WATCH-').Update('')
|
window.Element('-CUSTOM_WATCH-').Update('')
|
||||||
|
@ -23773,15 +23776,76 @@ def main_global_pysimplegui_settings():
|
||||||
'If you do not call theme("theme name") by your program to change the theme, then the default is used.\n' + \
|
'If you do not call theme("theme name") by your program to change the theme, then the default is used.\n' + \
|
||||||
'This setting allows you to set the theme that PySimpleGUI will use for ALL of your programs that\n' + \
|
'This setting allows you to set the theme that PySimpleGUI will use for ALL of your programs that\n' + \
|
||||||
'do not set a theme specifically.'
|
'do not set a theme specifically.'
|
||||||
|
"""
|
||||||
|
if sbar_trough_color is not None:
|
||||||
|
self.scroll_trough_color = sbar_trough_color
|
||||||
|
else:
|
||||||
|
self.scroll_trough_color = theme_slider_color()
|
||||||
|
|
||||||
|
if sbar_background_color is not None:
|
||||||
|
self.scroll_background_color = sbar_background_color
|
||||||
|
else:
|
||||||
|
self.scroll_background_color = theme_button_color()[1]
|
||||||
|
|
||||||
|
|
||||||
|
if sbar_arrow_color is not None:
|
||||||
|
self.scroll_arrow_color = sbar_arrow_color
|
||||||
|
else:
|
||||||
|
self.scroll_arrow_color = theme_button_color()[0]
|
||||||
|
|
||||||
|
if sbar_arrow_background_color is not None:
|
||||||
|
self.scroll_arrow_background_color = sbar_arrow_background_color
|
||||||
|
else:
|
||||||
|
self.scroll_arrow_background_color = theme_button_color()[1]
|
||||||
|
|
||||||
|
if sbar_width is not None:
|
||||||
|
self.scroll_width = sbar_width
|
||||||
|
else:
|
||||||
|
self.scroll_width = 10
|
||||||
|
|
||||||
|
if sbar_arrow_width is not None:
|
||||||
|
self.scroll_arrow_width = sbar_arrow_width
|
||||||
|
else:
|
||||||
|
self.scroll_arrow_width = self.scroll_width
|
||||||
|
|
||||||
|
if sbar_frame_color is not None:
|
||||||
|
self.scroll_frame_color = sbar_frame_color
|
||||||
|
else:
|
||||||
|
self.scroll_frame_color = theme_background_color()
|
||||||
|
|
||||||
|
if sbar_relief is not None:
|
||||||
|
self.scroll_relief = sbar_relief
|
||||||
|
else:
|
||||||
|
self.scroll_relief = RELIEF_RAISED
|
||||||
|
|
||||||
|
style.configure(style_name, troughcolor=element.scroll_trough_color)
|
||||||
|
style.configure(style_name, relief=element.scroll_relief)
|
||||||
|
style.configure(style_name, framecolor=element.scroll_frame_color)
|
||||||
|
style.configure(style_name, bordercolor=element.scroll_frame_color)
|
||||||
|
style.configure(style_name, width=element.scroll_width)
|
||||||
|
style.configure(style_name, arrowsize=element.scroll_arrow_width)
|
||||||
|
style.map(style_name, background=[("selected", element.scroll_background_color), ('active', element.scroll_arrow_color), ('background', element.scroll_background_color), ('!focus', element.scroll_background_color)])
|
||||||
|
style.map(style_name, arrowcolor=[("selected", element.scroll_arrow_color), ('active', element.scroll_background_color), ('background', element.scroll_arrow_color),('!focus', element.scroll_arrow_color)])
|
||||||
|
"""
|
||||||
|
theme_choices = ('Slider Color', 'Button Background Color', 'Button Text Color', 'Background Color', 'Input Background Color', 'Input Text Color', 'Text Color')
|
||||||
|
scrollbar_components = {'Trough Color':'Slider Color', 'Background Color':'Button Background Color', 'Frame Color':'Background Color', 'Arrow Color':'Button Text Color', 'Scroll Width':10, 'Arrow Width':10, 'Relief':RELIEF_RAISED}
|
||||||
|
ttk_scrollbar_tab_layout = [[Checkbox('Use TTK Scrollbars', settings.get('-use ttk scrollbars-', True))]]
|
||||||
|
|
||||||
|
ttk_layout = [[]]
|
||||||
|
for key, item in scrollbar_components.items():
|
||||||
|
ttk_layout += [[T(key, s=15), Combo(theme_choices, default_value=settings.get('-ttk scroll-'+key, item))]]
|
||||||
|
|
||||||
|
ttk_scrollbar_tab_layout += ttk_layout
|
||||||
|
ttk_tab = Tab('TTK Scrollbar', ttk_scrollbar_tab_layout)
|
||||||
|
|
||||||
layout = [[T('Global PySimpleGUI Settings', text_color=theme_button_color()[0], background_color=theme_button_color()[1],font='_ 18', expand_x=True, justification='c')]]
|
layout = [[T('Global PySimpleGUI Settings', text_color=theme_button_color()[0], background_color=theme_button_color()[1],font='_ 18', expand_x=True, justification='c')]]
|
||||||
|
|
||||||
interpreter_frame = Frame('Python Interpreter (normally leave blank)',
|
interpreter_tab = Tab('Python Interpreter',
|
||||||
[[T('Command to run a python program:'), In(settings.get('-python command-', ''), k='-PYTHON COMMAND-', enable_events=True), FileBrowse()]], font='_ 16', expand_x=True)
|
[[T('Normally leave this blank')],
|
||||||
|
[T('Command to run a python program:'), In(settings.get('-python command-', ''), k='-PYTHON COMMAND-', enable_events=True), FileBrowse()]], font='_ 16', expand_x=True)
|
||||||
|
|
||||||
layout += [[interpreter_frame]]
|
|
||||||
|
|
||||||
editor_frame = Frame('Editor Settings',
|
editor_tab = Tab('Editor Settings',
|
||||||
[[T('Command to invoke your editor:'), In(settings.get('-editor program-', ''), k='-EDITOR PROGRAM-', enable_events=True), FileBrowse()],
|
[[T('Command to invoke your editor:'), In(settings.get('-editor program-', ''), k='-EDITOR PROGRAM-', enable_events=True), FileBrowse()],
|
||||||
[T('String to launch your editor to edit at a particular line #.')],
|
[T('String to launch your editor to edit at a particular line #.')],
|
||||||
[T('Use tags <editor> <file> <line> to specify the string')],
|
[T('Use tags <editor> <file> <line> to specify the string')],
|
||||||
|
@ -23789,33 +23853,28 @@ def main_global_pysimplegui_settings():
|
||||||
[T('Edit Format String (hover for tooltip)', tooltip=tooltip),
|
[T('Edit Format String (hover for tooltip)', tooltip=tooltip),
|
||||||
In(settings.get('-editor format string-', '<editor> <file>'), k='-EDITOR FORMAT-', tooltip=tooltip)]], font='_ 16', expand_x=True)
|
In(settings.get('-editor format string-', '<editor> <file>'), k='-EDITOR FORMAT-', tooltip=tooltip)]], font='_ 16', expand_x=True)
|
||||||
|
|
||||||
layout += [[editor_frame]]
|
|
||||||
|
|
||||||
explorer_frame = Frame('Explorder Program',
|
explorer_tab = Tab('Explorer Program',
|
||||||
[[In(settings.get('-explorer program-', ''), k='-EXPLORER PROGRAM-', tooltip=tooltip_file_explorer)]], font='_ 16', expand_x=True, tooltip=tooltip_file_explorer)
|
[[In(settings.get('-explorer program-', ''), k='-EXPLORER PROGRAM-', tooltip=tooltip_file_explorer)]], font='_ 16', expand_x=True, tooltip=tooltip_file_explorer)
|
||||||
|
|
||||||
layout += [[explorer_frame]]
|
snapshots_tab = Tab('Window Snapshots',
|
||||||
|
|
||||||
|
|
||||||
snapshots_frame = Frame('Window Snapshots',
|
|
||||||
[[Combo(('',)+key_choices, default_value=settings.get(json.dumps(('-snapshot keysym-', i)), ''), readonly=True, k=('-SNAPSHOT KEYSYM-', i), s=(None, 30)) for i in range(4)],
|
[[Combo(('',)+key_choices, default_value=settings.get(json.dumps(('-snapshot keysym-', i)), ''), readonly=True, k=('-SNAPSHOT KEYSYM-', i), s=(None, 30)) for i in range(4)],
|
||||||
[T('Manually Entered Bind String:'), Input(settings.get('-snapshot keysym manual-', ''),k='-SNAPSHOT KEYSYM MANUAL-')],
|
[T('Manually Entered Bind String:'), Input(settings.get('-snapshot keysym manual-', ''),k='-SNAPSHOT KEYSYM MANUAL-')],
|
||||||
[T('Folder to store screenshots:'), Push(), In(settings.get('-screenshots folder-', ''), k='-SCREENSHOTS FOLDER-'), FolderBrowse()],
|
[T('Folder to store screenshots:'), Push(), In(settings.get('-screenshots folder-', ''), k='-SCREENSHOTS FOLDER-'), FolderBrowse()],
|
||||||
[T('Screenshots Filename or Prefix:'), Push(), In(settings.get('-screenshots filename-', ''), k='-SCREENSHOTS FILENAME-'), FileBrowse()],
|
[T('Screenshots Filename or Prefix:'), Push(), In(settings.get('-screenshots filename-', ''), k='-SCREENSHOTS FILENAME-'), FileBrowse()],
|
||||||
[Checkbox('Auto-number Images', k='-SCREENSHOTS AUTONUMBER-')]], font='_ 16', expand_x=True,)
|
[Checkbox('Auto-number Images', k='-SCREENSHOTS AUTONUMBER-')]], font='_ 16', expand_x=True,)
|
||||||
|
|
||||||
layout += [[snapshots_frame]]
|
|
||||||
|
|
||||||
|
theme_tab = Tab('Theme',
|
||||||
theme_frame = Frame('Theme',
|
|
||||||
[[T('Leave blank for "official" PySimpleGUI default theme: {}'.format(OFFICIAL_PYSIMPLEGUI_THEME))],
|
[[T('Leave blank for "official" PySimpleGUI default theme: {}'.format(OFFICIAL_PYSIMPLEGUI_THEME))],
|
||||||
[T('Default Theme For All Programs:'),
|
[T('Default Theme For All Programs:'),
|
||||||
Combo([''] + theme_list(), settings.get('-theme-', None), readonly=True, k='-THEME-', tooltip=tooltip_theme), Checkbox('Always use custom Titlebar', default=pysimplegui_user_settings.get('-custom titlebar-',False), k='-CUSTOM TITLEBAR-')]],
|
Combo([''] + theme_list(), settings.get('-theme-', None), readonly=True, k='-THEME-', tooltip=tooltip_theme), Checkbox('Always use custom Titlebar', default=pysimplegui_user_settings.get('-custom titlebar-',False), k='-CUSTOM TITLEBAR-')]],
|
||||||
font='_ 16', expand_x=True)
|
font='_ 16', expand_x=True)
|
||||||
|
|
||||||
|
settings_tab_group = TabGroup([[theme_tab, interpreter_tab, explorer_tab, editor_tab, ttk_tab, snapshots_tab ]])
|
||||||
|
layout += [[settings_tab_group]]
|
||||||
# [T('Buttons (Leave Unchecked To Use Default) NOT YET IMPLEMENTED!', font='_ 16')],
|
# [T('Buttons (Leave Unchecked To Use Default) NOT YET IMPLEMENTED!', font='_ 16')],
|
||||||
# [Checkbox('Always use TTK buttons'), CBox('Always use TK Buttons')],
|
# [Checkbox('Always use TTK buttons'), CBox('Always use TK Buttons')],
|
||||||
layout += [[theme_frame]]
|
|
||||||
layout += [[B('Ok', bind_return_key=True), B('Cancel'), B('Mac Patch Control')]]
|
layout += [[B('Ok', bind_return_key=True), B('Cancel'), B('Mac Patch Control')]]
|
||||||
|
|
||||||
window = Window('Settings', layout, keep_on_top=True, modal=True)
|
window = Window('Settings', layout, keep_on_top=True, modal=True)
|
||||||
|
|
Loading…
Reference in New Issue