代码之家  ›  专栏  ›  技术社区  ›  Björn

Python tkinter树视图未按预期收缩

  •  2
  • Björn  · 技术社区  · 1 年前

    我在左边的一个框架中有一个树视图元素,它与右边的另一个元素共享空间,在这个测试用例中,它是一个按钮。当窗口的大小调整为较小时,树视图不会收缩,但按钮会收缩。只有当按钮不再可见时,树视图才会开始收缩。这些列似乎有一个固定的最小大小。

    下面是一个测试程序,它显示了问题:

    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代替.back,但行为保持不变。也许我错过了什么。

    1 回复  |  直到 1 年前
        1
  •  1
  •   sLoNcE    1 年前

    使用网格而不是分组以更好地控制布局。 设置容器中的列权重,使树视图和按钮按比例调整大小。
    使用stick=“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()