頭の中は異空間

ものづくり中心

【Python】【Tk】Tkのtreeview(表)のヘッダ部分のクリックイベント設定方法

1時間くらいどん詰まりしたので覚書。

 

例えばこんな感じのテーブルがあって、お客様氏名とか郵便番号あたりの行をクリックしたときの挙動をつけたいとき。

f:id:notwo:20180615000844p:plain

 

ttk.Treeviewを継承したクラス内で実装する前提です。

イベント設定を

self.heading(番号(連番だと楽), text=表示したい名前, command=コールバック関数)

こんな感じにして、

コールバック関数内で

x = self.winfo_pointerx() - self.winfo_rootx()
self.identify_column(x)

とすると、どのヘッダがクリックされたかを、#~の形で取得出来ます(厳密にはどのカラムがクリックされたかの情報)。

 

たったこれだけで出来ます。

とはいえ、リファレンスを隅から隅まで見てもそれっぽい非常に旨味なメソッドがなかったのでやり方はこれしかないと思います。

 

やってることは画面に表示しているx座標をもとにidentify_column()でヘッダ名を特定しているだけです。クリック時のマウスカーソルx座標からtreeview自体のx座標を引けばクリック時のtreeview上の位置が特定出来ます。取得した番号から#を取り除いてcolumn()やheading()に渡せば、カラムやヘッダの設定を取得まで出来ます。

 

この手のイベント設定で考えられる使い道はたぶん、ソートしたいとき位ではないかな...?