2013-07-15 22 views
1

在tk中,列表框可​​以採用許多不同的selectModes:single,browse,multiple和extended。我想要的是一次只選擇一個項目(如單個或瀏覽),但當用戶再次單擊時取消選擇該選項 - 實質上是「單個或無」選項。tk:使列表框「切換」或「取消選擇」

我不認爲我可以使用ListboxSelect回調,因爲只有被稱爲「當列表框中的選定項目集被更新時」 - 而不是當用戶單擊前一個選擇時。

我必須訴諸一系列複選框嗎?

注意:對於列表框,我有exportselection = 0,所以當另一個小部件需要焦點時我不會失去我的選擇。

回答

0

你不必訴諸一系列的複選框,你可以簡單地綁定到buttonpress事件,並添加一個點擊處理程序。

觀察,一個例子:

bind $listbox <Button-1> {listbox_selection_toggler %W %x %y} 
proc listbox_selection_toggler {W x y} { 
    set c [$W cursel] 
    set i [$W index @$x,$y] 
    lassign [$W bbox $i] x1 y1 x2 y2; 
    set x2 [expr {$x1 + $x2}] 
    set y2 [expr {$y1 + $y2}] 
    if { $y < $y1 || $y > $y2 } { 
     puts "(Cur: $c) Clicked on $W at $x,$y, index $i. (NOT IN BBOX)"; 
    } else { 
     puts "(Cur: $c) Clicked on $W at $x,$y, index $i."; 
     if { $c != "" && $i == $c } { 
      puts "Toggling selection off." 
      after 0 [list $W sel clear 0 end] 
     } 
    } 
} 

現在,顯然有改進的空間,但是這表明了總體思路。

+0

我會認爲你的答案是正確的。我在Python中,綁定肯定是要走的路。爲了用戶的利益,我實際上添加了一個明確的「無選擇」選項。謝謝! –

相關問題