2017-06-02 15 views
0

(私はLinux上のPython 3.6でも同じことが起こります)は、一種のスプレッドシートレイアウトをエミュレートするために使用しています。私の問題は、以下のサンプルコードを実行し、 "Column 1"と "Column 1"のサイズが大きくなると "Column 2"が小さくなるということです。ただし、の最後の列を右にドラッグすると、スクロールバーが開き、列2のサイズを変更することなく列1のサイズを変更できます(ツリービュー全体が拡大されます)。たとえば、列1を再度サイズ変更すると、すべての列がビューに収まるまで、その動作は元の状態に戻ります。Pythonのtkinterのツリービューのカラムサイズ

この動作の原因は何ですか?どちらも、どのように停止できますか?どのようにしてデフォルトにすることができますか?

最小限の作業例:

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'は私のためにうまくいきます。それは、ウィジェットをOPで議論した「2ndモード」に強制します。公式のドキュメント:https://docs.python.org/3/library/tkinter.ttk.html#tkinter.ttk.Treeviewデフォルトでウィジェットが列のサイズを変更することがあるのはなぜか分かりません。しかし、そのような人生は... –