近來使用 TK 設計程式 GUI 時,使用 listbox widget 時發生了一些問題。透過 google 上的論壇,總算解決了。

問題描述:

將滑鼠的 Single Click Even bind 於 listbox widget 後,curselection 指令回傳的是上一次滑鼠點選的 Item。

解決方式:

TK 4.0 裡,每一個 widget 都有各自所屬的 binding group 或 tag。預設的 tag 就是 widget  name, widget class, widget 最上層的 widget name 以及 all. 由於 widget 名稱為第一順位;上述那些 binding ( 用於設定正確的選擇 ) 發生在 class binding 之前。 因此,欲取得一個選擇正確的 binding,你必須確認該 binding 是在 class binding 之後被執行-可透過 bindtags 這個指令。下面是個簡短的範例:

listbox .foo # 定義一個 listbox 的 widget 
bind MyTag <1> {puts [%W curselection]}
# 當滑鼠左鍵在 MyTage ( binding group ) 上點選時,即列印出正確的選擇。
bindtags .foo "[bindtags .foo] MyTag"
# 製作 binding group

ccchiu 發表在 痞客邦 PIXNET 留言(0) 人氣()