如果你只是想有一個呈現互斥選擇,對於天啊使用單選按鈕的任務三隻小部件。這就是他們在那裏。這就是用戶期望的。 (更好的是,把它們放在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
這樣的事情可以變得相當複雜,併產生非常好的圖形用戶界面。您還可以將它與單選按鈕混合(通過適當的調整,因爲狀態變量不再是布爾值)。但不要僅僅爲了簡單的從一個組中挑選一個;爲此,使用直接收集的檢查按鈕。
我有點困惑。你描述的行爲聽起來像你需要的是一個「單選按鈕」而不是「checkbutton」。而且我完全不知道「它抱怨在區塊的條件部分存在州議題」是什麼意思。也許一些特定的代碼或錯誤消息會有所幫助。 –
所以我有一個名爲「chkAll」的主複選框,然後它下面有一組複選框,它們是包含在「主」複選框中的單獨測試。但是,如果用戶不想進行全面測試,他/她應該可以選擇他/她想要運行的不同測試。因此,如果選中主複選框,那麼大概所有在其下面找到的單個測試都已包含在內,因此不需要選中這些複選框。 – ButtahNBred