Made expanding Tree element a single operation like other elements.

This commit is contained in:
PySimpleGUI 2021-06-10 10:14:43 -04:00
parent bf8d124b9b
commit 00fa20e13b
1 changed files with 19 additions and 16 deletions

View File

@ -1,6 +1,6 @@
#!/usr/bin/python3 #!/usr/bin/python3
version = __version__ = "4.43.0.8 Unreleased\nChanged get_versions string to be more clear, removed canvas from return values, cwd is automatically set to the folder of the application being launched when execute_py_file is called with cwd=None, popup_get_file changed to set parent=None if running on Mac, better Button error handling when bad Unicode chars are used or bad colors, open GitHub issue GUI - added collapse button to top section, see-through mode in test harness changed to be a toggle, font parm for multiline update print cprint for char by char font control, clipboard_set & clipboard_get, Listbox visibility fix" version = __version__ = "4.43.0.9 Unreleased\nChanged get_versions string to be more clear, removed canvas from return values, cwd is automatically set to the folder of the application being launched when execute_py_file is called with cwd=None, popup_get_file changed to set parent=None if running on Mac, better Button error handling when bad Unicode chars are used or bad colors, open GitHub issue GUI - added collapse button to top section, see-through mode in test harness changed to be a toggle, font parm for multiline update print cprint for char by char font control, clipboard_set & clipboard_get, Listbox visibility fix, Tree element expansion fixed, added new element_frame convention for elements that are in frames like the Listbox and Tree (need to check the other elements and add those that have frames)"
__version__ = version.split()[0] # For PEP 396 and PEP 345 __version__ = version.split()[0] # For PEP 396 and PEP 345
@ -1294,7 +1294,9 @@ class Element():
self.Widget.pack(expand=True, fill=fill) self.Widget.pack(expand=True, fill=fill)
self.ParentRowFrame.pack(expand=expand_row, fill=fill) self.ParentRowFrame.pack(expand=expand_row, fill=fill)
if self.Type == ELEM_TYPE_INPUT_LISTBOX: if self.Type == ELEM_TYPE_INPUT_LISTBOX:
self.listbox_frame.pack(expand=True, fill=fill) self.element_frame.pack(expand=True, fill=fill)
elif self.Type == ELEM_TYPE_TREE:
self.element_frame.pack(expand=True, fill=fill)
def set_cursor(self,cursor=None, cursor_color=None): def set_cursor(self,cursor=None, cursor_color=None):
@ -1965,7 +1967,7 @@ class Listbox(Element):
self.RightClickMenu = right_click_menu self.RightClickMenu = right_click_menu
self.vsb = None # type: tk.Scrollbar self.vsb = None # type: tk.Scrollbar
self.TKListbox = self.Widget = None # type: tk.Listbox self.TKListbox = self.Widget = None # type: tk.Listbox
self.listbox_frame = None # type: tk.Frame self.element_frame = None # type: tk.Frame
self.NoScrollbar = no_scrollbar self.NoScrollbar = no_scrollbar
key = key if key is not None else k key = key if key is not None else k
sz = size if size != (None, None) else s sz = size if size != (None, None) else s
@ -2017,11 +2019,11 @@ class Listbox(Element):
except: except:
warnings.warn('* Listbox Update selection_set failed with index {}*'.format(set_to_index)) warnings.warn('* Listbox Update selection_set failed with index {}*'.format(set_to_index))
if visible is False: if visible is False:
self.listbox_frame.pack_forget() self.element_frame.pack_forget()
if not self.NoScrollbar: if not self.NoScrollbar:
self.vsb.pack_forget() self.vsb.pack_forget()
elif visible is True: elif visible is True:
self.listbox_frame.pack(padx=self.pad_used[0], pady=self.pad_used[1]) self.element_frame.pack(padx=self.pad_used[0], pady=self.pad_used[1])
if not self.NoScrollbar: if not self.NoScrollbar:
self.vsb.pack() self.vsb.pack()
if scroll_to_index is not None and len(self.Values): if scroll_to_index is not None and len(self.Values):
@ -7408,7 +7410,8 @@ class Tree(Element):
self.ShowExpanded = show_expanded self.ShowExpanded = show_expanded
self.NumRows = num_rows self.NumRows = num_rows
self.Col0Width = col0_width self.Col0Width = col0_width
self.TKTreeview = None self.TKTreeview = None # type: ttk.Treeview
self.element_frame = None # type: tk.Frame
self.SelectedRows = [] self.SelectedRows = []
self.ChangeSubmits = change_submits or enable_events self.ChangeSubmits = change_submits or enable_events
self.RightClickMenu = right_click_menu self.RightClickMenu = right_click_menu
@ -13118,9 +13121,9 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
width = element_size[0] width = element_size[0]
else: else:
width = max_line_len width = max_line_len
listbox_frame = tk.Frame(tk_row_frame) element_frame = tk.Frame(tk_row_frame)
element.TKStringVar = tk.StringVar() element.TKStringVar = tk.StringVar()
element.TKListbox = element.Widget = tk.Listbox(listbox_frame, height=element_size[1], width=width, element.TKListbox = element.Widget = tk.Listbox(element_frame, height=element_size[1], width=width,
selectmode=element.SelectMode, font=font, exportselection=False) selectmode=element.SelectMode, font=font, exportselection=False)
element.Widget.config(highlightthickness=0) element.Widget.config(highlightthickness=0)
for index, item in enumerate(element.Values): for index, item in enumerate(element.Values):
@ -13138,17 +13141,17 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
if element.ChangeSubmits: if element.ChangeSubmits:
element.TKListbox.bind('<<ListboxSelect>>', element._ListboxSelectHandler) element.TKListbox.bind('<<ListboxSelect>>', element._ListboxSelectHandler)
if not element.NoScrollbar: if not element.NoScrollbar:
element.vsb = tk.Scrollbar(listbox_frame, orient="vertical", command=element.TKListbox.yview) element.vsb = tk.Scrollbar(element_frame, orient="vertical", command=element.TKListbox.yview)
element.TKListbox.configure(yscrollcommand=element.vsb.set) element.TKListbox.configure(yscrollcommand=element.vsb.set)
element.vsb.pack(side=tk.RIGHT, fill='y') element.vsb.pack(side=tk.RIGHT, fill='y')
# Chr0nic # Chr0nic
element.TKListbox.bind("<Enter>", lambda event, em=element: testMouseHook(em)) element.TKListbox.bind("<Enter>", lambda event, em=element: testMouseHook(em))
element.TKListbox.bind("<Leave>", lambda event, em=element: testMouseUnhook(em)) element.TKListbox.bind("<Leave>", lambda event, em=element: testMouseUnhook(em))
listbox_frame.pack(side=tk.LEFT, padx=elementpad[0], pady=elementpad[1]) element_frame.pack(side=tk.LEFT, padx=elementpad[0], pady=elementpad[1])
element.TKListbox.pack(side=tk.LEFT) element.TKListbox.pack(side=tk.LEFT)
if element.visible is False: if element.visible is False:
listbox_frame.pack_forget() element_frame.pack_forget()
element.vsb.pack_forget() element.vsb.pack_forget()
if element.BindReturnKey: if element.BindReturnKey:
element.TKListbox.bind('<Return>', element._ListboxSelectHandler) element.TKListbox.bind('<Return>', element._ListboxSelectHandler)
@ -13158,7 +13161,7 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
if element.Tooltip is not None: if element.Tooltip is not None:
element.TooltipObject = ToolTip(element.TKListbox, text=element.Tooltip, element.TooltipObject = ToolTip(element.TKListbox, text=element.Tooltip,
timeout=DEFAULT_TOOLTIP_TIME) timeout=DEFAULT_TOOLTIP_TIME)
element.listbox_frame = listbox_frame element.element_frame = element_frame
_add_right_click_menu(element) _add_right_click_menu(element)
# ------------------------- MULTILINE placement element ------------------------- # # ------------------------- MULTILINE placement element ------------------------- #
elif element_type == ELEM_TYPE_INPUT_MULTILINE: elif element_type == ELEM_TYPE_INPUT_MULTILINE:
@ -13817,7 +13820,7 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
# ------------------------- Tree placement element ------------------------- # # ------------------------- Tree placement element ------------------------- #
elif element_type == ELEM_TYPE_TREE: elif element_type == ELEM_TYPE_TREE:
element = element # type: Tree element = element # type: Tree
frame = tk.Frame(tk_row_frame) element.element_frame = element_frame = tk.Frame(tk_row_frame)
height = element.NumRows height = element.NumRows
if element.Justification.startswith('l'): # justification if element.Justification.startswith('l'): # justification
@ -13836,7 +13839,7 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
displaycolumns.append(element.ColumnHeadings[i]) displaycolumns.append(element.ColumnHeadings[i])
column_headings = element.ColumnHeadings column_headings = element.ColumnHeadings
# ------------- GET THE TREEVIEW WIDGET ------------- # ------------- GET THE TREEVIEW WIDGET -------------
element.TKTreeview = element.Widget = ttk.Treeview(frame, columns=column_headings, element.TKTreeview = element.Widget = ttk.Treeview(element_frame, columns=column_headings,
displaycolumns=displaycolumns, show='tree headings', displaycolumns=displaycolumns, show='tree headings',
height=height, height=height,
selectmode=element.SelectMode) selectmode=element.SelectMode)
@ -13911,14 +13914,14 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
if element.RowHeight: if element.RowHeight:
tree_style.configure(style_name, rowheight=element.RowHeight) tree_style.configure(style_name, rowheight=element.RowHeight)
treeview.configure(style=style_name) # IMPORTANT! Be sure and set the style name for this widget treeview.configure(style=style_name) # IMPORTANT! Be sure and set the style name for this widget
scrollbar = tk.Scrollbar(frame) element.scrollbar = scrollbar = tk.Scrollbar(element_frame)
scrollbar.pack(side=tk.RIGHT, fill='y') scrollbar.pack(side=tk.RIGHT, fill='y')
scrollbar.config(command=treeview.yview) scrollbar.config(command=treeview.yview)
treeview.configure(yscrollcommand=scrollbar.set) treeview.configure(yscrollcommand=scrollbar.set)
element.TKTreeview.pack(side=tk.LEFT, expand=True, padx=0, pady=0, fill='both') element.TKTreeview.pack(side=tk.LEFT, expand=True, padx=0, pady=0, fill='both')
if element.visible is False: if element.visible is False:
element.TKTreeview.pack_forget() element.TKTreeview.pack_forget()
frame.pack(side=tk.LEFT, expand=True, padx=elementpad[0], pady=elementpad[1]) element_frame.pack(side=tk.LEFT, expand=True, padx=elementpad[0], pady=elementpad[1])
treeview.bind("<<TreeviewSelect>>", element._treeview_selected) treeview.bind("<<TreeviewSelect>>", element._treeview_selected)
if element.Tooltip is not None: # tooltip if element.Tooltip is not None: # tooltip
element.TooltipObject = ToolTip(element.TKTreeview, text=element.Tooltip, element.TooltipObject = ToolTip(element.TKTreeview, text=element.Tooltip,