Merge pull request #4904 from PySimpleGUI/Dev-latest
Addition of bar_color to the ProgressBar.update method. Fixed Image e…
This commit is contained in:
commit
f0d28167ae
|
@ -1,8 +1,7 @@
|
||||||
#!/usr/bin/python3
|
#!/usr/bin/python3
|
||||||
version = __version__ = "4.53.0.5 Unreleased"
|
version = __version__ = "4.53.0.6 Unreleased"
|
||||||
|
|
||||||
_change_log = """
|
_change_log = """
|
||||||
|
|
||||||
Changelog since 4.53.0 released to PyPI on 24-Oct-2021
|
Changelog since 4.53.0 released to PyPI on 24-Oct-2021
|
||||||
|
|
||||||
4.53.0.1
|
4.53.0.1
|
||||||
|
@ -26,7 +25,9 @@ _change_log = """
|
||||||
image_subsample parameter - subsample for image (makes smaller by 1/image_subsample)
|
image_subsample parameter - subsample for image (makes smaller by 1/image_subsample)
|
||||||
TabGroup changes
|
TabGroup changes
|
||||||
tab_border_width parameter - sets the border around the tab top portion. Now can set to 0 if you want
|
tab_border_width parameter - sets the border around the tab top portion. Now can set to 0 if you want
|
||||||
Removed the green color for the Multiple Choice Group in sg.main so that it's readable now
|
4.53.0.6
|
||||||
|
Added bar_color to ProgressMeter.update
|
||||||
|
Fixed a couple of typos from previous changes
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__version__ = version.split()[0] # For PEP 396 and PEP 345
|
__version__ = version.split()[0] # For PEP 396 and PEP 345
|
||||||
|
@ -495,11 +496,14 @@ THEME_LIST = ('default', 'winnative', 'clam', 'alt', 'classic', 'vista', 'xpnati
|
||||||
|
|
||||||
# The theme to use by default for all windows
|
# The theme to use by default for all windows
|
||||||
DEFAULT_TTK_THEME = THEME_DEFAULT
|
DEFAULT_TTK_THEME = THEME_DEFAULT
|
||||||
|
TTK_THEME_LIST = ('default', 'winnative', 'clam', 'alt', 'classic', 'vista', 'xpnative')
|
||||||
|
|
||||||
|
|
||||||
USE_TTK_BUTTONS = None
|
USE_TTK_BUTTONS = None
|
||||||
|
|
||||||
DEFAULT_PROGRESS_BAR_COLOR = (GREENS[0], '#D0D0D0') # a nice green progress bar
|
DEFAULT_PROGRESS_BAR_COLOR = ("#01826B", '#D0D0D0') # a nice green progress bar
|
||||||
DEFAULT_PROGRESS_BAR_COMPUTE = ('#000000', '#000000') # Means that the progress bar colors should be computed from other colors
|
DEFAULT_PROGRESS_BAR_COMPUTE = ('#000000', '#000000') # Means that the progress bar colors should be computed from other colors
|
||||||
DEFAULT_PROGRESS_BAR_COLOR_OFFICIAL = (GREENS[0], '#D0D0D0') # a nice green progress bar
|
DEFAULT_PROGRESS_BAR_COLOR_OFFICIAL = ("#01826B", '#D0D0D0') # a nice green progress bar
|
||||||
DEFAULT_PROGRESS_BAR_SIZE = (20, 20) # Size of Progress Bar (characters for length, pixels for width)
|
DEFAULT_PROGRESS_BAR_SIZE = (20, 20) # Size of Progress Bar (characters for length, pixels for width)
|
||||||
DEFAULT_PROGRESS_BAR_BORDER_WIDTH = 1
|
DEFAULT_PROGRESS_BAR_BORDER_WIDTH = 1
|
||||||
DEFAULT_PROGRESS_BAR_RELIEF = RELIEF_GROOVE
|
DEFAULT_PROGRESS_BAR_RELIEF = RELIEF_GROOVE
|
||||||
|
@ -3542,7 +3546,7 @@ SBar = StatusBar
|
||||||
class TKProgressBar():
|
class TKProgressBar():
|
||||||
uniqueness_counter = 0
|
uniqueness_counter = 0
|
||||||
|
|
||||||
def __init__(self, root, max, length=400, width=DEFAULT_PROGRESS_BAR_SIZE[1], style=DEFAULT_TTK_THEME,
|
def __init__(self, root, max, length=400, width=DEFAULT_PROGRESS_BAR_SIZE[1], ttk_theme=DEFAULT_TTK_THEME, style_name='',
|
||||||
relief=DEFAULT_PROGRESS_BAR_RELIEF, border_width=DEFAULT_PROGRESS_BAR_BORDER_WIDTH,
|
relief=DEFAULT_PROGRESS_BAR_RELIEF, border_width=DEFAULT_PROGRESS_BAR_BORDER_WIDTH,
|
||||||
orientation='horizontal', BarColor=(None, None), key=None):
|
orientation='horizontal', BarColor=(None, None), key=None):
|
||||||
"""
|
"""
|
||||||
|
@ -3554,8 +3558,10 @@ class TKProgressBar():
|
||||||
:type length: (int)
|
:type length: (int)
|
||||||
:param width: width in pixels of the bar
|
:param width: width in pixels of the bar
|
||||||
:type width: (int)
|
:type width: (int)
|
||||||
:param style: Progress bar style defined as one of these 'default', 'winnative', 'clam', 'alt', 'classic', 'vista', 'xpnative'
|
:param style_name: Progress bar style to use. Set in the packer function
|
||||||
:type style: (str)
|
:type style_name: (str)
|
||||||
|
:param ttk_theme: Progress bar style defined as one of these 'default', 'winnative', 'clam', 'alt', 'classic', 'vista', 'xpnative'
|
||||||
|
:type ttk_theme: (str)
|
||||||
:param relief: relief style. Values are same as progress meter relief values. Can be a constant or a string: `RELIEF_RAISED RELIEF_SUNKEN RELIEF_FLAT RELIEF_RIDGE RELIEF_GROOVE RELIEF_SOLID` (Default value = DEFAULT_PROGRESS_BAR_RELIEF)
|
:param relief: relief style. Values are same as progress meter relief values. Can be a constant or a string: `RELIEF_RAISED RELIEF_SUNKEN RELIEF_FLAT RELIEF_RIDGE RELIEF_GROOVE RELIEF_SOLID` (Default value = DEFAULT_PROGRESS_BAR_RELIEF)
|
||||||
:type relief: (str)
|
:type relief: (str)
|
||||||
:param border_width: The amount of pixels that go around the outside of the bar
|
:param border_width: The amount of pixels that go around the outside of the bar
|
||||||
|
@ -3574,39 +3580,34 @@ class TKProgressBar():
|
||||||
self.Orientation = orientation
|
self.Orientation = orientation
|
||||||
self.Count = None
|
self.Count = None
|
||||||
self.PriorCount = 0
|
self.PriorCount = 0
|
||||||
self.StyleName = ''
|
self.style_name = style_name
|
||||||
|
|
||||||
TKProgressBar.uniqueness_counter += 1
|
TKProgressBar.uniqueness_counter += 1
|
||||||
|
|
||||||
if orientation.lower().startswith('h'):
|
if orientation.lower().startswith('h'):
|
||||||
s = ttk.Style()
|
s = ttk.Style()
|
||||||
s.theme_use(style)
|
s.theme_use(ttk_theme)
|
||||||
|
|
||||||
self.style_name = str(key) + str(TKProgressBar.uniqueness_counter) + "my.Horizontal.TProgressbar"
|
# self.style_name = str(key) + str(TKProgressBar.uniqueness_counter) + "my.Horizontal.TProgressbar"
|
||||||
if BarColor != COLOR_SYSTEM_DEFAULT:
|
if BarColor != COLOR_SYSTEM_DEFAULT and BarColor[0] != COLOR_SYSTEM_DEFAULT:
|
||||||
s.configure(self.style_name, background=BarColor[0], troughcolor=BarColor[1],
|
s.configure(self.style_name, background=BarColor[0], troughcolor=BarColor[1],
|
||||||
troughrelief=relief, borderwidth=border_width, thickness=width)
|
troughrelief=relief, borderwidth=border_width, thickness=width)
|
||||||
else:
|
else:
|
||||||
s.configure(self.style_name, troughrelief=relief, borderwidth=border_width,
|
s.configure(self.style_name, troughrelief=relief, borderwidth=border_width, thickness=width)
|
||||||
thickness=width)
|
|
||||||
|
|
||||||
self.TKProgressBarForReal = ttk.Progressbar(root, maximum=self.Max,
|
self.TKProgressBarForReal = ttk.Progressbar(root, maximum=self.Max, style=self.style_name, length=length, orient=tk.HORIZONTAL, mode='determinate')
|
||||||
style=self.style_name, length=length,
|
|
||||||
orient=tk.HORIZONTAL, mode='determinate')
|
|
||||||
else:
|
else:
|
||||||
s = ttk.Style()
|
s = ttk.Style()
|
||||||
s.theme_use(style)
|
s.theme_use(ttk_theme)
|
||||||
self.style_name = str(key) + str(TKProgressBar.uniqueness_counter) + "my.Vertical.TProgressbar"
|
# self.style_name = str(key) + str(TKProgressBar.uniqueness_counter) + "my.Vertical.TProgressbar"
|
||||||
if BarColor != COLOR_SYSTEM_DEFAULT:
|
if BarColor != COLOR_SYSTEM_DEFAULT and BarColor[0] != COLOR_SYSTEM_DEFAULT:
|
||||||
|
|
||||||
s.configure(self.style_name, background=BarColor[0],
|
s.configure(self.style_name, background=BarColor[0],
|
||||||
troughcolor=BarColor[1], troughrelief=relief, borderwidth=border_width, thickness=width)
|
troughcolor=BarColor[1], troughrelief=relief, borderwidth=border_width, thickness=width)
|
||||||
else:
|
else:
|
||||||
s.configure(self.style_name, troughrelief=relief,
|
s.configure(self.style_name, troughrelief=relief, borderwidth=border_width, thickness=width)
|
||||||
borderwidth=border_width, thickness=width)
|
|
||||||
self.TKProgressBarForReal = ttk.Progressbar(root, maximum=self.Max,
|
self.TKProgressBarForReal = ttk.Progressbar(root, maximum=self.Max, style=self.style_name, length=length, orient=tk.VERTICAL, mode='determinate')
|
||||||
style=self.style_name,
|
|
||||||
length=length, orient=tk.VERTICAL, mode='determinate')
|
|
||||||
|
|
||||||
def Update(self, count=None, max=None):
|
def Update(self, count=None, max=None):
|
||||||
"""
|
"""
|
||||||
|
@ -4624,16 +4625,12 @@ class ProgressBar(Element):
|
||||||
self.NotRunning = True
|
self.NotRunning = True
|
||||||
self.Orientation = orientation if orientation else DEFAULT_METER_ORIENTATION
|
self.Orientation = orientation if orientation else DEFAULT_METER_ORIENTATION
|
||||||
self.RightClickMenu = right_click_menu
|
self.RightClickMenu = right_click_menu
|
||||||
|
self.ttk_style_name = None # set in the pack function so can use in the update
|
||||||
# Progress Bar colors can be a tuple (text, background) or a string with format "bar on background" - examples "red on white" or ("red", "white")
|
# Progress Bar colors can be a tuple (text, background) or a string with format "bar on background" - examples "red on white" or ("red", "white")
|
||||||
if bar_color is None:
|
if bar_color is None:
|
||||||
bar_color = DEFAULT_PROGRESS_BAR_COLOR
|
bar_color = DEFAULT_PROGRESS_BAR_COLOR
|
||||||
else:
|
else:
|
||||||
try:
|
bar_color = _simplified_dual_color_to_tuple(bar_color, default=DEFAULT_PROGRESS_BAR_COLOR)
|
||||||
if isinstance(bar_color, str):
|
|
||||||
bar_color = bar_color.split(' on ')
|
|
||||||
except Exception as e:
|
|
||||||
print('* ProgressBar warning * you messed up with color formatting', e)
|
|
||||||
|
|
||||||
self.BarColor = bar_color # should be a tuple at this point
|
self.BarColor = bar_color # should be a tuple at this point
|
||||||
self.BarStyle = style if style else DEFAULT_TTK_THEME
|
self.BarStyle = style if style else DEFAULT_TTK_THEME
|
||||||
|
@ -4673,7 +4670,7 @@ class ProgressBar(Element):
|
||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def update(self, current_count, max=None, visible=None):
|
def update(self, current_count=None, max=None, bar_color=None, visible=None):
|
||||||
"""
|
"""
|
||||||
Changes some of the settings for the ProgressBar Element. Must call `Window.Read` or `Window.Finalize` prior
|
Changes some of the settings for the ProgressBar Element. Must call `Window.Read` or `Window.Finalize` prior
|
||||||
Now has the ability to modify the count so that the update_bar method is not longer needed separately
|
Now has the ability to modify the count so that the update_bar method is not longer needed separately
|
||||||
|
@ -4682,6 +4679,8 @@ class ProgressBar(Element):
|
||||||
:type current_count: (int)
|
:type current_count: (int)
|
||||||
:param max: changes the max value
|
:param max: changes the max value
|
||||||
:type max: (int)
|
:type max: (int)
|
||||||
|
:param bar_color: The 2 colors that make up a progress bar. Easy to remember which is which if you say "ON" between colors. "red" on "green".
|
||||||
|
:type bar_color: (str, str) or str
|
||||||
:param visible: control visibility of element
|
:param visible: control visibility of element
|
||||||
:type visible: (bool)
|
:type visible: (bool)
|
||||||
:return: Returns True if update was OK. False means something wrong with window or it was closed
|
:return: Returns True if update was OK. False means something wrong with window or it was closed
|
||||||
|
@ -4699,8 +4698,14 @@ class ProgressBar(Element):
|
||||||
self.TKProgressBar.TKProgressBarForReal.pack(padx=self.pad_used[0], pady=self.pad_used[1])
|
self.TKProgressBar.TKProgressBarForReal.pack(padx=self.pad_used[0], pady=self.pad_used[1])
|
||||||
if visible is not None:
|
if visible is not None:
|
||||||
self._visible = visible
|
self._visible = visible
|
||||||
|
if bar_color is not None:
|
||||||
|
bar_color = _simplified_dual_color_to_tuple(bar_color, default=DEFAULT_PROGRESS_BAR_COLOR)
|
||||||
|
self.BarColor = bar_color
|
||||||
|
style = ttk.Style()
|
||||||
|
style.configure(self.ttk_style_name, background=bar_color[0], troughcolor=bar_color[1])
|
||||||
|
if current_count is not None:
|
||||||
|
self.TKProgressBar.Update(current_count, max=max)
|
||||||
|
|
||||||
self.TKProgressBar.Update(current_count, max=max)
|
|
||||||
try:
|
try:
|
||||||
self.ParentForm.TKroot.update()
|
self.ParentForm.TKroot.update()
|
||||||
except:
|
except:
|
||||||
|
@ -6159,7 +6164,7 @@ class Tab(Element):
|
||||||
elif isinstance(image_source, str):
|
elif isinstance(image_source, str):
|
||||||
filename = image_source
|
filename = image_source
|
||||||
else:
|
else:
|
||||||
warnings.warn('Image element - source is not a valid type: {}'.format(type(source)), UserWarning)
|
warnings.warn('Image element - source is not a valid type: {}'.format(type(image_source)), UserWarning)
|
||||||
|
|
||||||
self.Filename = filename
|
self.Filename = filename
|
||||||
self.Data = data
|
self.Data = data
|
||||||
|
@ -8631,6 +8636,7 @@ class Window:
|
||||||
self._grab_anywhere_include_these_list = []
|
self._grab_anywhere_include_these_list = []
|
||||||
self._has_custom_titlebar = use_custom_titlebar
|
self._has_custom_titlebar = use_custom_titlebar
|
||||||
self._mousex = self._mousey = 0
|
self._mousex = self._mousey = 0
|
||||||
|
self._startx = self._starty = 0
|
||||||
self.scaling = scaling if scaling is not None else DEFAULT_SCALING
|
self.scaling = scaling if scaling is not None else DEFAULT_SCALING
|
||||||
if self.use_custom_titlebar:
|
if self.use_custom_titlebar:
|
||||||
self.Margins = (0, 0)
|
self.Margins = (0, 0)
|
||||||
|
@ -12609,7 +12615,7 @@ def _simplified_dual_color_to_tuple(color_tuple_or_string, default=(None, None))
|
||||||
return (COLOR_SYSTEM_DEFAULT, COLOR_SYSTEM_DEFAULT)
|
return (COLOR_SYSTEM_DEFAULT, COLOR_SYSTEM_DEFAULT)
|
||||||
text_color = background_color = COLOR_SYSTEM_DEFAULT
|
text_color = background_color = COLOR_SYSTEM_DEFAULT
|
||||||
try:
|
try:
|
||||||
if isinstance(color_tuple_or_string, tuple):
|
if isinstance(color_tuple_or_string, (tuple, list)):
|
||||||
if len(color_tuple_or_string) >= 2:
|
if len(color_tuple_or_string) >= 2:
|
||||||
text_color = color_tuple_or_string[0] or default[0]
|
text_color = color_tuple_or_string[0] or default[0]
|
||||||
background_color = color_tuple_or_string[1] or default[1]
|
background_color = color_tuple_or_string[1] or default[1]
|
||||||
|
@ -12634,16 +12640,16 @@ def _simplified_dual_color_to_tuple(color_tuple_or_string, default=(None, None))
|
||||||
text_color, background_color = default
|
text_color, background_color = default
|
||||||
else:
|
else:
|
||||||
if not SUPPRESS_ERROR_POPUPS:
|
if not SUPPRESS_ERROR_POPUPS:
|
||||||
_error_popup_with_traceback('** Badly formatted button color... not a tuple nor string **', color_tuple_or_string)
|
_error_popup_with_traceback('** Badly formatted dual-color... not a tuple nor string **', color_tuple_or_string)
|
||||||
else:
|
else:
|
||||||
print('** Badly formatted button color... not a tuple nor string **', color_tuple_or_string)
|
print('** Badly formatted dual-color... not a tuple nor string **', color_tuple_or_string)
|
||||||
text_color = background_color = COLOR_SYSTEM_DEFAULT
|
text_color, background_color = default
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
if not SUPPRESS_ERROR_POPUPS:
|
if not SUPPRESS_ERROR_POPUPS:
|
||||||
_error_popup_with_traceback('** Badly formatted button color **', color_tuple_or_string, e)
|
_error_popup_with_traceback('** Badly formatted button color **', color_tuple_or_string, e)
|
||||||
else:
|
else:
|
||||||
print('** Badly formatted button color... not a tuple nor string **', color_tuple_or_string, e)
|
print('** Badly formatted button color... not a tuple nor string **', color_tuple_or_string, e)
|
||||||
text_color = background_color = COLOR_SYSTEM_DEFAULT
|
text_color, background_color = default
|
||||||
if isinstance(text_color, int):
|
if isinstance(text_color, int):
|
||||||
text_color = "#%06X" % text_color
|
text_color = "#%06X" % text_color
|
||||||
if isinstance(background_color, int):
|
if isinstance(background_color, int):
|
||||||
|
@ -14392,10 +14398,15 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
|
||||||
bar_color = element.BarColor
|
bar_color = element.BarColor
|
||||||
else:
|
else:
|
||||||
bar_color = DEFAULT_PROGRESS_BAR_COLOR
|
bar_color = DEFAULT_PROGRESS_BAR_COLOR
|
||||||
|
if element.Orientation.lower().startswith('h'):
|
||||||
|
base_style_name = ".Horizontal.TProgressbar"
|
||||||
|
else:
|
||||||
|
base_style_name = ".Vertical.TProgressbar"
|
||||||
|
style_name = _make_ttk_style_name(base_style_name, element)
|
||||||
element.TKProgressBar = TKProgressBar(tk_row_frame, element.MaxValue, progress_length, progress_width,
|
element.TKProgressBar = TKProgressBar(tk_row_frame, element.MaxValue, progress_length, progress_width,
|
||||||
orientation=direction, BarColor=bar_color,
|
orientation=direction, BarColor=bar_color,
|
||||||
border_width=element.BorderWidth, relief=element.Relief,
|
border_width=element.BorderWidth, relief=element.Relief,
|
||||||
style=toplevel_form.TtkTheme, key=element.Key)
|
ttk_theme=toplevel_form.TtkTheme, key=element.Key, style_name=style_name)
|
||||||
expand, fill, row_should_expand, row_fill_direction = _add_expansion(element, row_should_expand, row_fill_direction)
|
expand, fill, row_should_expand, row_fill_direction = _add_expansion(element, row_should_expand, row_fill_direction)
|
||||||
element.TKProgressBar.TKProgressBarForReal.pack(side=tk.LEFT, padx=elementpad[0], pady=elementpad[1], expand=expand, fill=fill)
|
element.TKProgressBar.TKProgressBarForReal.pack(side=tk.LEFT, padx=elementpad[0], pady=elementpad[1], expand=expand, fill=fill)
|
||||||
if element.visible is False:
|
if element.visible is False:
|
||||||
|
@ -19159,7 +19170,7 @@ def popup_animated(image_source, message=None, background_color=None, text_color
|
||||||
window = Window(title, layout, no_titlebar=no_titlebar, grab_anywhere=grab_anywhere,
|
window = Window(title, layout, no_titlebar=no_titlebar, grab_anywhere=grab_anywhere,
|
||||||
keep_on_top=keep_on_top, background_color=background_color, location=location,
|
keep_on_top=keep_on_top, background_color=background_color, location=location,
|
||||||
alpha_channel=alpha_channel, element_padding=(0, 0), margins=(0, 0),
|
alpha_channel=alpha_channel, element_padding=(0, 0), margins=(0, 0),
|
||||||
transparent_color=transparent_color, finalize=True, element_justification='c', icon=icon)
|
transparent_color=transparent_color, finalize=True, element_justification='c', icon=icon, relative_location=relative_location)
|
||||||
Window._animated_popup_dict[image_source] = window
|
Window._animated_popup_dict[image_source] = window
|
||||||
else:
|
else:
|
||||||
window = Window._animated_popup_dict[image_source]
|
window = Window._animated_popup_dict[image_source]
|
||||||
|
@ -19411,7 +19422,7 @@ def shell_with_animation(command, args=None, image_source=DEFAULT_BASE64_LOADING
|
||||||
while True:
|
while True:
|
||||||
popup_animated(image_source=image_source, message=message, time_between_frames=time_between_frames, transparent_color=transparent_color,
|
popup_animated(image_source=image_source, message=message, time_between_frames=time_between_frames, transparent_color=transparent_color,
|
||||||
text_color=text_color, background_color=background_color, font=font, no_titlebar=no_titlebar, grab_anywhere=grab_anywhere,
|
text_color=text_color, background_color=background_color, font=font, no_titlebar=no_titlebar, grab_anywhere=grab_anywhere,
|
||||||
keep_on_top=keep_on_top, location=location, relative_location=relative_location, alpha_channel=alpha_channel)
|
keep_on_top=keep_on_top, location=location, alpha_channel=alpha_channel)
|
||||||
thread.join(timeout=time_between_frames / 1000)
|
thread.join(timeout=time_between_frames / 1000)
|
||||||
if not thread.is_alive():
|
if not thread.is_alive():
|
||||||
break
|
break
|
||||||
|
|
Loading…
Reference in New Issue