2013-07-17 55 views
0

我一直在尋找幾個在線資源,試圖讓我的檢查按鈕變灰,當另一個按鈕被選中。然而,在我所有的嘗試中,我似乎無法讓它起作用。TCL灰色檢查按鈕

以下是工作示例: 3個複選框稱爲chkAll,chkBalanced和chkFXO。比方說,當chkAll被選中並處於活動狀態時,chkBalanced和chkFXO將被取消選中。我試過使用if語句來查看chkAll的狀態,但它抱怨在塊的條件部分有狀態問題。我應該考慮使用變量,如果是的話,我該如何實現它們?我知道checkbuttons有一個可變的選項,但我也不知道如何使用它

+0

我有點困惑。你描述的行爲聽起來像你需要的是一個「單選按鈕」而不是「checkbutton」。而且我完全不知道「它抱怨在區塊的條件部分存在州議題」是什麼意思。也許一些特定的代碼或錯誤消息會有所幫助。 –

+0

所以我有一個名爲「chkAll」的主複選框,然後它下面有一組複選框,它們是包含在「主」複選框中的單獨測試。但是,如果用戶不想進行全面測試,他/她應該可以選擇他/她想要運行的不同測試。因此,如果選中主複選框,那麼大概所有在其下面找到的單個測試都已包含在內,因此不需要選中這些複選框。 – ButtahNBred

回答

1

如果你想做一個排他性的選擇,你不應該使用checkbuttons。你所描述的是單選按鈕的行爲。

要使用單選按鈕,您可以創建兩個或更多個併爲它們提供所有相同的變量。您將只能一次選擇一個。

foreach value {chkAll chkBalanced chkFXO} { 
    radiobutton .rb-$value -text $value -variable myvar \ 
     -justify left -value $value 
    pack .rb-$value -side top -fill x -anchor w 
} 
+0

最好爲每個選項指定'-value'選項,而不是依靠默認值。 –

+0

@DonalFellows:感謝您的支持!本來我在那裏做了一個tkinter的例子,然後我意識到這個問題是關於tcl的,所以我開始替代這個例子。 –

0

如果你只是想有一個呈現互斥選擇,對於天啊使用單選按鈕的任務三隻小部件。這就是他們在那裏。這就是用戶期望的。 (更好的是,把它們放在labelframe中;這樣可以提高可用性,但只需很少的努力)。

如果你還有其他事情要做,並且需要基於checkbutton「打開和關閉」窗口小部件,你可以這樣做通過在由檢查按鈕-variable選項引用的變量上寫入trace。然後,根據變量的值,該跟蹤應該啓用(更改爲-state normal)或禁用(更改爲-state disabled)其他小部件觸發時。

checkbutton .cb -variable bools(cb) -text "Foo Bar" 
button .other -text "Example extra content" 
button .widget -text "Second ordinary button" 
# NOTE the ;# at the end; IMPORTANT HACK to discard trace arguments 
trace add variable bools(cb) {changed bools(cb) .other .widget;#} 
proc changed {varName args} { 
    upvar "#0" $varName var 
    foreach w $args { 
     if {$var} { 
      $w configure -state normal 
     } else { 
      $w configure -state disabled 
     } 
    } 
} 
set bools(cb) 0; # <<< Initialize to known state 
pack .cb .other .widget 

這樣的事情可以變得相當複雜,併產生非常好的圖形用戶界面。您還可以將它與單選按鈕混合(通過適當的調整,因爲狀態變量不再是布爾值)。但不要僅僅爲了簡單的從一個組中挑選一個;爲此,使用直接收集的檢查按鈕。

+0

我試着運行你的例子,並得到以下內容>希望test.tcl 啓動腳本錯誤:錯誤#參數:應該是「跟蹤添加變量名opList命令」 執行時 「跟蹤添加變量布爾(cb) {更改bools(cb).other .widget \;#}「 (文件」test.tcl「第5行) –