Fix for expand_x, expand_y on scrollable columns

This commit is contained in:
PySimpleGUI 2021-10-21 09:41:41 -04:00
parent f97f933ed0
commit a97fe0ebf1
1 changed files with 72 additions and 3 deletions

View File

@ -1,7 +1,7 @@
#!/usr/bin/python3
version = __version__ = "4.51.2.1 Unreleased"
version = __version__ = "4.51.2.2 Unreleased"
_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.
Enables you to move windows that you can no longer reach the titlebar for
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
@ -128,6 +129,7 @@ from tkinter.colorchooser import askcolor
from tkinter import ttk
import tkinter.scrolledtext as tkst
import tkinter.font
from uuid import uuid4
# end of tkinter specific imports
# get the tkinter detailed version
@ -13090,6 +13092,61 @@ def _add_right_click_menu(element, toplevel_form):
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
def PackFormIntoFrame(form, containing_frame, toplevel_form):
"""
@ -13234,6 +13291,10 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
expand = False
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')
@ -13301,6 +13362,7 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
# ------------------------- COLUMN placement element ------------------------- #
if element_type == ELEM_TYPE_COLUMN:
element = element # type: Column
# ----------------------- SCROLLABLE Column ----------------------
if element.Scrollable:
element.Widget = element.TKColFrame = TkScrollableFrame(tk_row_frame, element.VerticalScrollOnly) # do not use yet! not working
PackFormIntoFrame(element, element.TKColFrame.TKFrame, toplevel_form)
@ -13324,7 +13386,13 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
highlightthickness=0)
element.TKColFrame.config(background=element.BackgroundColor, borderwidth=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:
if element.Size != (None, None):
element.Widget = element.TKColFrame = TkFixedFrame(tk_row_frame)
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,
highlightthickness=0)
if element.Justification is None:
pass
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)
_add_right_click_menu(element)
# row_should_expand=True
# ------------------------- Tab placement element ------------------------- #
elif element_type == ELEM_TYPE_TAB: