Python tkinter树视图列大小
我在Python tkinter树视图列大小,python,python-3.x,tkinter,Python,Python 3.x,Tkinter,我在tkinter中有一个Treeview(在Linux上是Python 3.6,但在windows上也是如此),我用它来模拟一种电子表格布局。我的问题是,如果我运行下面的示例代码,并调整大小,比如说“column1”,那么随着“column1”变大,“column2”变小。但是,如果我向右拖出最后一列,滚动条将展开,现在我可以调整第1列的大小,而无需更改第2列的大小(而是整个树视图将展开)。然后,如果再次调整列1的大小,直到所有列都适合视图,则行为似乎恢复到原始状态 是什么导致了这种行为的改变
tkinter
中有一个Treeview
(在Linux上是Python 3.6,但在windows上也是如此),我用它来模拟一种电子表格布局。我的问题是,如果我运行下面的示例代码,并调整大小,比如说“column1”,那么随着“column1”变大,“column2”变小。但是,如果我向右拖出最后一列,滚动条将展开,现在我可以调整第1列的大小,而无需更改第2列的大小(而是整个树视图将展开)。然后,如果再次调整列1的大小,直到所有列都适合视图,则行为似乎恢复到原始状态
是什么导致了这种行为的改变?两者都有,我如何停止它,我如何确保它是默认的
最简单的工作示例:
import tkinter as tk
import tkinter.ttk as ttk
root = tk.Tk()
root.columnconfigure(0, weight=1)
root.rowconfigure(0, weight=1)
tree = ttk.Treeview(root)
tree["show"] = "headings"
tree["columns"] = list(range(3))
for i in range(3):
tree.heading(i, text="Column {}".format(i))
for i in range(5):
tree.insert('', "end", i)
tree.grid(row=0, column=0, sticky=(tk.N, tk.S, tk.E, tk.W))
xs = ttk.Scrollbar(root, orient=tk.HORIZONTAL, command=tree.xview)
tree["xscrollcommand"] = xs.set
xs.grid(row=1, column=0, sticky=(tk.E, tk.W))
root.mainloop()
Treeview
中的最佳控件是使用列的stretch
属性。如果您使用所有列的“拉伸”和“最小宽度”属性
for i in range(3):
tree.column('#' + str(i), minwidth=300, stretch=0)
tree.heading(i, text="Column {}".format(i))
tree.column('#0', stretch=0)
谢谢因此
stretch=False
对我来说效果很好:它强制小部件进入我在OP中讨论过的“第二模式”。官方文档:仍然有点不清楚为什么在默认情况下,小部件有时会调整列的大小。但这就是生活。。。