我在左侧的框架中有一个树视图元素,它与右侧的另一个元素共享空间,在这个测试用例中,它是一个按钮。当窗口大小调整为较小尺寸时,树视图不会缩小,但按钮会缩小。当按钮不再可见时,树视图才开始缩小。看起来这些列有一个固定的最小尺寸。
这是一个测试程序,它显示了问题:
from tkinter import *
from tkinter import ttk
root = Tk()
root.geometry("400x200")
upper_container = Frame(root)
upper_container.pack(fill="x")
left_tree = ttk.Treeview(upper_container, column=("c1", "c2"))
left_tree.column("# 0", anchor=CENTER)
left_tree.heading("# 0", text="ID")
left_tree.column("# 1", anchor=CENTER)
left_tree.heading("# 1", text="Test")
left_tree.pack(side=LEFT, fill="x", expand=True)
right_button = ttk.Button(upper_container, text="Button")
right_button.pack(side=LEFT, fill="x", expand=True)
root.mainloop()
我的预期行为是,两个元素都开始缩小。我尝试使用 .grid 而不是 .pack,但行为保持不变。也许我错过了一些东西。
使用网格而不是包来更好地控制布局。
设置容器中的列权重,以使 Treeview 和按钮按比例调整大小。
使用 Sticky="nsew" 使小部件向各个方向扩展。
设置树视图列允许的最小宽度。
缩小。
from tkinter import *
from tkinter import ttk
root = Tk()
root.geometry("400x200")
upper_container = Frame(root)
upper_container.pack(fill="both", expand=True)
upper_container.columnconfigure(0, weight=3)
upper_container.columnconfigure(1, weight=1)
left_tree = ttk.Treeview(upper_container, columns=("c1", "c2"), show="headings")
left_tree.heading("c1", text="ID")
left_tree.heading("c2", text="Test")
left_tree.column("c1", anchor=CENTER, width=50, minwidth=50)
left_tree.column("c2", anchor=CENTER, width=100, minwidth=50)
left_tree.grid(row=0, column=0, sticky="nsew")
right_button = ttk.Button(upper_container, text="Button")
right_button.grid(row=0, column=1, sticky="nsew", padx=(5, 0))
root.mainloop()