Merge pull request #4847 from PySimpleGUI/Dev-latest

Fix for expand_x, expand_y on scrollable columns
This commit is contained in:
PySimpleGUI 2021-10-21 09:42:03 -04:00 committed by GitHub
commit 0ff8172f29
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 72 additions and 3 deletions

View File

@ -1,7 +1,7 @@
#!/usr/bin/python3 #!/usr/bin/python3
version = __version__ = "4.51.2.1 Unreleased" version = __version__ = "4.51.2.2 Unreleased"
_change_log = """ _change_log = """
@ -14,7 +14,8 @@ _change_log = """
If enabled, you can use the control key + Left Mouse button to move your Window, just like Grab Anywhere. If enabled, you can use the control key + Left Mouse button to move your Window, just like Grab Anywhere.
Enables you to move windows that you can no longer reach the titlebar for Enables you to move windows that you can no longer reach the titlebar for
Let's see if anyone notices or complains Let's see if anyone notices or complains
4.51.2.2
Fix for expand_x, expand_y on Scrollable Columns
""" """
__version__ = version.split()[0] # For PEP 396 and PEP 345 __version__ = version.split()[0] # For PEP 396 and PEP 345
@ -128,6 +129,7 @@ from tkinter.colorchooser import askcolor
from tkinter import ttk from tkinter import ttk
import tkinter.scrolledtext as tkst import tkinter.scrolledtext as tkst
import tkinter.font import tkinter.font
from uuid import uuid4
# end of tkinter specific imports # end of tkinter specific imports
# get the tkinter detailed version # get the tkinter detailed version
@ -13090,6 +13092,61 @@ def _add_right_click_menu(element, toplevel_form):
element.Widget.bind('<ButtonRelease-3>', element._RightClickMenuCallback) element.Widget.bind('<ButtonRelease-3>', element._RightClickMenuCallback)
class Stylist:
@staticmethod
def get_elements(layout):
"""Return a list of elements contained in the style"""
elements = []
element = layout[0][0]
elements.append(element)
sublayout = layout[0][1]
if 'children' in sublayout:
child_elements = Stylist.get_elements(sublayout['children'])
elements.extend(child_elements)
return elements
@staticmethod
def get_options(ttkstyle, theme=None):
style = ttk.Style()
if theme is not None:
style.theme_use(theme)
layout = style.layout(ttkstyle)
elements = Stylist.get_elements(layout)
options = []
for e in elements:
_opts = style.element_options(e)
if _opts:
options.extend(list(_opts))
return list(set(options))
@staticmethod
def create_style(base_style: str, theme=None, **kwargs):
style = ttk.Style()
if theme is not None:
style.theme_use(theme)
style_id = uuid4()
ttkstyle = '{}.{}'.format(style_id, base_style)
style.configure(ttkstyle, **kwargs)
return ttkstyle
# if __name__ == '__main__':
# root = tk.Tk()
#
# # find out what options are available for the theme and widget style
# options = Stylist.get_options('TFrame', 'default')
# print('The options for this style and theme are', options)
#
# # create a new style
# frame_style = Stylist.create_style('TFrame', 'alt', relief=tk.RAISED, borderwidth=1)
#
# # apply the new style
# ttk.Frame(style=frame_style, width=100, height=100).pack(padx=10, pady=10)
#
# root.mainloop()
# @_timeit # @_timeit
def PackFormIntoFrame(form, containing_frame, toplevel_form): def PackFormIntoFrame(form, containing_frame, toplevel_form):
""" """
@ -13234,6 +13291,10 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
expand = False expand = False
return expand, fill, row_should_expand, row_fill_direction return expand, fill, row_should_expand, row_fill_direction
def _column_configure(event, canvas, frame_id):
canvas.itemconfig(frame_id, width=canvas.winfo_width())
canvas.itemconfig(frame_id, height=canvas.winfo_height())
tclversion_detailed = tkinter.Tcl().eval('info patchlevel') tclversion_detailed = tkinter.Tcl().eval('info patchlevel')
@ -13301,6 +13362,7 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
# ------------------------- COLUMN placement element ------------------------- # # ------------------------- COLUMN placement element ------------------------- #
if element_type == ELEM_TYPE_COLUMN: if element_type == ELEM_TYPE_COLUMN:
element = element # type: Column element = element # type: Column
# ----------------------- SCROLLABLE Column ----------------------
if element.Scrollable: if element.Scrollable:
element.Widget = element.TKColFrame = TkScrollableFrame(tk_row_frame, element.VerticalScrollOnly) # do not use yet! not working element.Widget = element.TKColFrame = TkScrollableFrame(tk_row_frame, element.VerticalScrollOnly) # do not use yet! not working
PackFormIntoFrame(element, element.TKColFrame.TKFrame, toplevel_form) PackFormIntoFrame(element, element.TKColFrame.TKFrame, toplevel_form)
@ -13324,7 +13386,13 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
highlightthickness=0) highlightthickness=0)
element.TKColFrame.config(background=element.BackgroundColor, borderwidth=0, element.TKColFrame.config(background=element.BackgroundColor, borderwidth=0,
highlightthickness=0) highlightthickness=0)
frame_id = element.Widget.frame_id
canvas = element.Widget.canvas
canvas.bind("<Configure>", lambda event, canvas=element.TKColFrame.canvas, frame_id=frame_id: _column_configure(event, canvas, frame_id))
# ----------------------- PLAIN Column ----------------------
else: else:
if element.Size != (None, None): if element.Size != (None, None):
element.Widget = element.TKColFrame = TkFixedFrame(tk_row_frame) element.Widget = element.TKColFrame = TkFixedFrame(tk_row_frame)
PackFormIntoFrame(element, element.TKColFrame.TKFrame, toplevel_form) PackFormIntoFrame(element, element.TKColFrame.TKFrame, toplevel_form)
@ -13346,6 +13414,8 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
element.TKColFrame.config(background=element.BackgroundColor, borderwidth=0, element.TKColFrame.config(background=element.BackgroundColor, borderwidth=0,
highlightthickness=0) highlightthickness=0)
if element.Justification is None: if element.Justification is None:
pass pass
elif element.Justification.lower().startswith('l'): elif element.Justification.lower().startswith('l'):
@ -14502,7 +14572,6 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
element.TooltipObject = ToolTip(labeled_frame, text=element.Tooltip, timeout=DEFAULT_TOOLTIP_TIME) element.TooltipObject = ToolTip(labeled_frame, text=element.Tooltip, timeout=DEFAULT_TOOLTIP_TIME)
_add_right_click_menu(element) _add_right_click_menu(element)
# row_should_expand=True # row_should_expand=True
# ------------------------- Tab placement element ------------------------- # # ------------------------- Tab placement element ------------------------- #
elif element_type == ELEM_TYPE_TAB: elif element_type == ELEM_TYPE_TAB: