Table - better column sizing based on font used
This commit is contained in:
parent
45c58c57e8
commit
0356c3e260
|
@ -1,6 +1,6 @@
|
||||||
#!/usr/bin/python3
|
#!/usr/bin/python3
|
||||||
|
|
||||||
version = __version__ = "4.16.3 Unreleased\n update_animation_no_buffering, popup_notify, removed TRANSPARENT_BUTTON, TabGroup now autonumbers keys"
|
version = __version__ = "4.16.4 Unreleased\n update_animation_no_buffering, popup_notify, removed TRANSPARENT_BUTTON, TabGroup now autonumbers keys, Table col width better size based on font"
|
||||||
|
|
||||||
port = 'PySimpleGUI'
|
port = 'PySimpleGUI'
|
||||||
|
|
||||||
|
@ -8589,9 +8589,13 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def CharWidthInPixels():
|
def _char_width_in_pixels(font):
|
||||||
""" """
|
""" """
|
||||||
return tkinter.font.Font().measure('A') # single character width
|
return tkinter.font.Font(font=font).measure('A') # single character width
|
||||||
|
|
||||||
|
def _string_width_in_pixels(font, string):
|
||||||
|
""" """
|
||||||
|
return tkinter.font.Font(font=font).measure(string) # single character width
|
||||||
|
|
||||||
border_depth = toplevel_form.BorderDepth if toplevel_form.BorderDepth is not None else DEFAULT_BORDER_WIDTH
|
border_depth = toplevel_form.BorderDepth if toplevel_form.BorderDepth is not None else DEFAULT_BORDER_WIDTH
|
||||||
# --------------------------------------------------------------------------- #
|
# --------------------------------------------------------------------------- #
|
||||||
|
@ -8941,7 +8945,7 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
|
||||||
if element.DisabledButtonColor[1] is not None:
|
if element.DisabledButtonColor[1] is not None:
|
||||||
button_style.map(style_name, background=[('disabled', element.DisabledButtonColor[1])])
|
button_style.map(style_name, background=[('disabled', element.DisabledButtonColor[1])])
|
||||||
if height > 1:
|
if height > 1:
|
||||||
button_style.configure(style_name, padding=height * CharWidthInPixels())
|
button_style.configure(style_name, padding=height * _char_width_in_pixels(font))
|
||||||
wraplen = tkbutton.winfo_reqwidth() # width of widget in Pixels
|
wraplen = tkbutton.winfo_reqwidth() # width of widget in Pixels
|
||||||
if width != 0:
|
if width != 0:
|
||||||
button_style.configure(style_name, wraplength=wraplen) # set wrap to width of widget
|
button_style.configure(style_name, wraplength=wraplen) # set wrap to width of widget
|
||||||
|
@ -9682,7 +9686,7 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
|
||||||
# ------------------------- SLIDER placement element ------------------------- #
|
# ------------------------- SLIDER placement element ------------------------- #
|
||||||
elif element_type == ELEM_TYPE_INPUT_SLIDER:
|
elif element_type == ELEM_TYPE_INPUT_SLIDER:
|
||||||
element = element # type: Slider
|
element = element # type: Slider
|
||||||
slider_length = element_size[0] * CharWidthInPixels()
|
slider_length = element_size[0] * _char_width_in_pixels(font)
|
||||||
slider_width = element_size[1]
|
slider_width = element_size[1]
|
||||||
element.TKIntVar = tk.IntVar()
|
element.TKIntVar = tk.IntVar()
|
||||||
element.TKIntVar.set(element.DefaultValue)
|
element.TKIntVar.set(element.DefaultValue)
|
||||||
|
@ -9774,19 +9778,19 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
|
||||||
treeview = element.TKTreeview
|
treeview = element.TKTreeview
|
||||||
if element.DisplayRowNumbers:
|
if element.DisplayRowNumbers:
|
||||||
treeview.heading(element.RowHeaderText, text=element.RowHeaderText) # make a dummy heading
|
treeview.heading(element.RowHeaderText, text=element.RowHeaderText) # make a dummy heading
|
||||||
treeview.column(element.RowHeaderText, width=50, minwidth=10, anchor=anchor, stretch=0)
|
treeview.column(element.RowHeaderText, width=_string_width_in_pixels(font, element.RowHeaderText)+10, minwidth=10, anchor=anchor, stretch=0)
|
||||||
|
|
||||||
headings = element.ColumnHeadings if element.ColumnHeadings is not None else element.Values[0]
|
headings = element.ColumnHeadings if element.ColumnHeadings is not None else element.Values[0]
|
||||||
for i, heading in enumerate(headings):
|
for i, heading in enumerate(headings):
|
||||||
treeview.heading(heading, text=heading)
|
treeview.heading(heading, text=heading)
|
||||||
if element.AutoSizeColumns:
|
if element.AutoSizeColumns:
|
||||||
width = max(column_widths[i], len(heading))
|
width = max(column_widths[i], _string_width_in_pixels(font, heading) + 10)
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
width = element.ColumnWidths[i]
|
width = element.ColumnWidths[i] * _char_width_in_pixels(font)
|
||||||
except:
|
except:
|
||||||
width = element.DefaultColumnWidth
|
width = element.DefaultColumnWidth * _char_width_in_pixels(font)
|
||||||
treeview.column(heading, width=width * CharWidthInPixels(), minwidth=10, anchor=anchor, stretch=0)
|
treeview.column(heading, width=width, minwidth=10, anchor=anchor, stretch=0)
|
||||||
|
|
||||||
# Insert values into the tree
|
# Insert values into the tree
|
||||||
for i, value in enumerate(element.Values):
|
for i, value in enumerate(element.Values):
|
||||||
|
@ -9891,7 +9895,7 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
|
||||||
width = element.ColumnWidths[i]
|
width = element.ColumnWidths[i]
|
||||||
except:
|
except:
|
||||||
width = element.DefaultColumnWidth
|
width = element.DefaultColumnWidth
|
||||||
treeview.column(heading, width=width * CharWidthInPixels(), anchor=anchor)
|
treeview.column(heading, width=width * _char_width_in_pixels(font), anchor=anchor)
|
||||||
|
|
||||||
def add_treeview_data(node):
|
def add_treeview_data(node):
|
||||||
"""
|
"""
|
||||||
|
@ -9921,7 +9925,7 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
|
||||||
add_treeview_data(node)
|
add_treeview_data(node)
|
||||||
|
|
||||||
add_treeview_data(element.TreeData.root_node)
|
add_treeview_data(element.TreeData.root_node)
|
||||||
treeview.column('#0', width=element.Col0Width * CharWidthInPixels(), anchor=anchor)
|
treeview.column('#0', width=element.Col0Width * _char_width_in_pixels(font), anchor=anchor)
|
||||||
# ----- configure colors -----
|
# ----- configure colors -----
|
||||||
style_name = str(element.Key) + '.Treeview'
|
style_name = str(element.Key) + '.Treeview'
|
||||||
tree_style = ttk.Style()
|
tree_style = ttk.Style()
|
||||||
|
|
Loading…
Reference in New Issue