[英]Python - tkinter: Resize Treeview horizontally
為了說明anytree
中tkinter
樹的大樹,我使用Treeview
。 我的目標是水平調整(動態) Treeview
object 的數據在調整 window 的大小后存儲的列的大小。我試圖將Treeview
object 本身放在某個Frame
中並用一些sticky="ew"
制作它。 由於某種原因,我的想法沒有任何效果。
PS:我知道我可以設置column
的width
self.treeview.column("# 1",anchor=CENTER, stretch=YES, width=1000)
這棵樹的問題就解決了。 但是我需要一些來自anytree
的任意樹的動態解決方案。
希望你能幫助並告訴我如何解決這個問題。
我的代碼:
from tkinter import *
from tkinter import ttk
from anytree import Node, RenderTree, AsciiStyle, PreOrderIter
# anytree definition
udo = Node("Udo the very first king of London and Manchester, born in China and studied in Japan.")
marc = Node("Marc the second monarch of south carolina married Isabel the very first arab princess.", parent=udo)
class AnyTreeView(Toplevel):
'''
Illustrates some anytree treeview into some
'''
def __init__(self, master, tree ):
super().__init__(master = master)
self.resizable(width=True, height=False)
self.main_frame = Frame(self)
self.main_frame.grid(row=1,column=1,sticky="ew")
self.title('AnyTreeView')
self.tree = tree
h = len([node.name for node in PreOrderIter(tree)])
self.treeview = ttk.Treeview(self.main_frame, column=("c1"), height = h)
self.treeview.column("# 1",anchor=CENTER, stretch=YES)
self.treeview.pack(expand=True, fill='y')
def generate(self):
'''
Dynamically generates the treeview object with the nodes from the parameter tree.
'''
index = 0
for node in PreOrderIter(self.tree):
print(node.name)
self.treeview.insert('',f'{index}', node.name, text = node.name)
index = index + 1
for node in PreOrderIter(self.tree):
for child in node.children:
self.treeview.move(child.name, node.name, 'end')
def m_tree():
tv = AnyTreeView(root, udo)
tv.generate()
root = Tk()
bt = Button(text ="Tree", command = m_tree)
bt.pack()
root.mainloop()
基於上述評論的解決方案:
from tkinter import *
from tkinter import ttk
from anytree import Node, RenderTree, AsciiStyle, PreOrderIter
# anytree definition
udo = Node("Udo the very first king of London and Manchester, born in China and studied in Japan.")
marc = Node("Marc the second monarch of south carolina married Isabel the very first arab princess.", parent=udo)
class AnyTreeView(Toplevel):
'''
Illustrates some anytree treeview into some
'''
def __init__(self, master, tree ):
super().__init__(master = master)
self.resizable(width=True, height=False)
self.main_frame = Frame(self)
self.main_frame.grid(row=1,column=1,sticky="ew")
self.title('AnyTreeView')
self.tree = tree
h = len([node.name for node in PreOrderIter(tree)])
self.treeview = ttk.Treeview(self.main_frame, column=("c1"), height = h)
self.treeview.column("# 1",anchor=CENTER, stretch=YES)
# Streching treeview after right atjust the window
self.columnconfigure(1, weight=1)
self.treeview.pack(expand=True, fill='x')
def generate(self):
'''
Dynamically generates the treeview object with the nodes from the parameter tree.
'''
index = 0
for node in PreOrderIter(self.tree):
print(node.name)
self.treeview.insert('',f'{index}', node.name, text = node.name)
index = index + 1
for node in PreOrderIter(self.tree):
for child in node.children:
self.treeview.move(child.name, node.name, 'end')
def m_tree():
tv = AnyTreeView(root, udo)
tv.generate()
root = Tk()
bt = Button(text ="Tree", command = m_tree)
bt.pack()
root.mainloop()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.