私にはttk.Notebook
があり、各タブにはttk.Treeview
が含まれています。すべてのツリービューには同じ列がありますが、下のコードのように異なる項目が含まれています。ttk.Treeview列のサイズ変更を検出する方法は?
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
notebook = ttk.Notebook(root)
notebook.pack()
tree1 = ttk.Treeview(notebook, columns=['a', 'b', 'c'])
tree1.insert('', 'end', text='item1', values=('a1', 'b1', 'c1'))
tree2 = ttk.Treeview(notebook, columns=['a', 'b', 'c'])
tree2.insert('', 'end', text='item2', values=('a2', 'b2', 'c2'))
tree2.insert('', 'end', text='item2', values=('a2', 'b2', 'c2'))
notebook.add(tree1, text='Tab 1')
notebook.add(tree2, text='Tab 2')
root.mainloop()
私はすべてのツリーが常に同じ列幅を持つようにしたいと思います。たとえば、ユーザーが列「a」のサイズをtree1
に変更すると、列「a」のtree2
もサイズ変更する必要があります。
私は tree1.column('a', 'width')
でカラムのサイズを取得し、tree2.column('a', width=300)
と設定することができます。
しかし、どのようにして列のサイズが変更されたことを検出できますか?
ツリービュー<Configure>
イベントが列のサイズ変更によってトリガーされないことを確認しました。
あなたがユーザーとの対話のためだけ気にする場合は、 ''バック 'イベントへのコールを結合して、' identify_region(event.x、event.y)を確認することができます。 'separator 'を返す場合、' identify_column(event.x) 'とそれに続く' width'を介してカラムの 'iid'を取得します。指定された幅を持つ指定されたウィジェットのすべての列を反復処理する関数を作成します。あなたが 'width'をプログラム的に変更した場合、その関数を呼び出してください。ユーザーによって変更された場合は、 ''がそれを処理する必要があります。 –
CommonSense
ええ、それは良いアイデアのように見えます。しかし、私はどれくらいパフォーマンスが低下するのか、ツリービューがどれくらい反応するかは分かりません。明らかに実装に依存しています。しかし、別のオプションは、同じロジックで ' 'にバインドして、起こりうる性能問題を防ぐことです。 –
CommonSense
'ttk :: treeview :: Press'でこれを解決するのは面白いことでしょう。 – Nae