Merge pull request #4091 from PySimpleGUI/Dev-latest
Better duplicate key error reporting
This commit is contained in:
commit
5f6327fe6e
|
@ -1,6 +1,6 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/python3
|
||||||
|
|
||||||
version = __version__ = "4.37.0.3 Unreleased\nMultiline scrollbar parameter renamed to no_scrollbar to match the listbox (sorry! but at least I caught it quickly), more debugger work, addition of constant MENU_SHORTCUT_CHARACTER (&), added execute_find_callers_filename, icon added to popup_scrolled"
|
version = __version__ = "4.37.0.5 Unreleased\nMultiline scrollbar parameter renamed to no_scrollbar to match the listbox (sorry! but at least I caught it quickly), more debugger work, addition of constant MENU_SHORTCUT_CHARACTER (&), added execute_find_callers_filename, icon added to popup_scrolled, better error reporting for duplicate keys"
|
||||||
|
|
||||||
__version__ = version.split()[0] # For PEP 396 and PEP 345
|
__version__ = version.split()[0] # For PEP 396 and PEP 345
|
||||||
|
|
||||||
|
@ -8597,12 +8597,16 @@ class Window:
|
||||||
top_window.DictionaryKeyCounter += 1
|
top_window.DictionaryKeyCounter += 1
|
||||||
if element.Key is not None:
|
if element.Key is not None:
|
||||||
if element.Key in key_dict.keys():
|
if element.Key in key_dict.keys():
|
||||||
print('*** Duplicate key found in your layout {} ***'.format(
|
if element.Type != ELEM_TYPE_BUTTON: # for Buttons, let duplicate key errors be silent
|
||||||
element.Key)) if element.Type != ELEM_TYPE_BUTTON else None
|
warnings.warn('*** Duplicate key found in your layout {} ***'.format(element.Key), UserWarning)
|
||||||
|
warnings.warn('*** Replaced new key with {} ***'.format(str(element.Key) + str(self.UniqueKeyCounter)))
|
||||||
|
if not SUPPRESS_ERROR_POPUPS:
|
||||||
|
_error_popup_with_traceback('Duplicate key found in your layout', 'Dupliate key: {}'.format(element.Key),
|
||||||
|
'Is being replaced with: {}'.format(str(element.Key) + str(self.UniqueKeyCounter)),
|
||||||
|
'The line of code above shows you which layout, but does not tell you exactly where the element was defined',
|
||||||
|
'The element type is {}'.format(element.Type))
|
||||||
element.Key = str(element.Key) + str(self.UniqueKeyCounter)
|
element.Key = str(element.Key) + str(self.UniqueKeyCounter)
|
||||||
self.UniqueKeyCounter += 1
|
self.UniqueKeyCounter += 1
|
||||||
print('*** Replaced new key with {} ***'.format(
|
|
||||||
element.Key)) if element.Type != ELEM_TYPE_BUTTON else None
|
|
||||||
key_dict[element.Key] = element
|
key_dict[element.Key] = element
|
||||||
return key_dict
|
return key_dict
|
||||||
|
|
||||||
|
@ -11295,15 +11299,20 @@ def ColorChooserButton(button_text, target=(None, None), image_filename=None, im
|
||||||
|
|
||||||
def button_color_to_tuple(color_tuple_or_string, default=None):
|
def button_color_to_tuple(color_tuple_or_string, default=None):
|
||||||
"""
|
"""
|
||||||
Convert a color tuple or color string into 2 components
|
Convert a color tuple or color string into 2 components and returns them as a tuple
|
||||||
|
(Text Color, Button Background Color)
|
||||||
|
If None is passed in as the first parameter, then the theme's button color is
|
||||||
|
returned
|
||||||
|
|
||||||
:param color_tuple_or_string: Button color - tuple or a simplied color string with word "on" between color
|
:param color_tuple_or_string: Button color - tuple or a simplied color string with word "on" between color
|
||||||
:type color_tuple_or_string: str | Tuple[str, str]
|
:type color_tuple_or_string: str | Tuple[str, str]
|
||||||
:param default: The 2 colors to use if there is a problem. Otherwise defaults to the theme's button color
|
:param default: The 2 colors to use if there is a problem. Otherwise defaults to the theme's button color
|
||||||
:type default: Tuple[str, str]
|
:type default: Tuple[str, str]
|
||||||
:return: (str | Tuple[str, str]
|
:return: (str | Tuple[str, str]
|
||||||
|
:rtype: str | Tuple[str, str]
|
||||||
"""
|
"""
|
||||||
if color_tuple_or_string is None:
|
if color_tuple_or_string is None:
|
||||||
return theme_button_color()
|
color_tuple_or_string = theme_button_color()
|
||||||
if color_tuple_or_string == COLOR_SYSTEM_DEFAULT:
|
if color_tuple_or_string == COLOR_SYSTEM_DEFAULT:
|
||||||
return (COLOR_SYSTEM_DEFAULT, COLOR_SYSTEM_DEFAULT)
|
return (COLOR_SYSTEM_DEFAULT, COLOR_SYSTEM_DEFAULT)
|
||||||
default = theme_button_color() if default is None else default
|
default = theme_button_color() if default is None else default
|
||||||
|
|
Loading…
Reference in New Issue