2017-06-02 282 views
0

我有一個Treeviewtkinter(Linux上的Python 3.6,但同樣發生在Windows上),我用它來模擬一種電子表格佈局。我的問題是,如果我在下面運行示例代碼,並調整大小說「列1」,那麼隨着「列1」變大,「列2」變小。但是,如果我將最後的列拖出到右側,滾動條將展開,現在我可以調整第1列的大小而不更改第2列的大小(而是整個樹視圖展開)。如果您再調整第1列的大小,直到所有列都適合視圖,則行爲似乎會恢復到原始狀態。Python tkinter treeview列大小

是什麼導致了這種行爲改變?兩者,我怎樣才能阻止它,以及如何確保它是默認的?

最小工作例如:

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() 

回答

1

您在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) 
+0

謝謝!所以'stretch = False'對我來說效果很好:它迫使widget進入我在OP中討論的「第二模式」。官方文檔:https://docs.python.org/3/library/tkinter.ttk.html#tkinter.ttk.Treeview仍然讓它略微不清楚,爲什麼,默認情況下,小部件有時會調整列的大小。但這就是生活...... –