TCL TK checkbutton:获取选中的按钮列表

TCL TK checkbutton: get checked button list

我通过 for 循环创建了复选按钮列表。

foreach tb $tbs {
    checkbutton .tb_q.q.{$tb} -text $tb -command onClick  \
        -onvalue true -offvalue false -variable selected
}

在 proc onClick 中,我需要找出选中了哪些复选按钮。

proc onClick {} {

    global selected
    
    # Find out all the selected checkboxes index
    ......
}

问题是我无法在此处设置 -变量选择。因为使用 for 循环,每个复选按钮都会使用这个变量。

我想找出选中的复选按钮的索引。怎么做?

谢谢。

一种方法是使用数组而不是普通变量,然后遍历数组的元素。演示程序:

#!/usr/bin/env wish

set names {a b c d}
foreach b $names {
    checkbutton .cb_$b -text $b -command onClick -variable selected($b)
    pack .cb_$b
}

button .quit -text Quit -command exit
pack .quit

proc onClick {} {
    global selected
    set chosen {}
    foreach {name val} [array get selected] {
        if {$val} {
            lappend chosen $name
        }
    }
    set chosen [lsort $chosen]
    puts "Selected buttons: $chosen"
}