TCL / TK如何在for循环中生成组合框/按钮并调用该函数?

时间:2017-08-24 01:33:21

标签: tcl tk

我想在for循环中生成几个组合框和按钮,按钮命令将调用该函数并检查组合框内容,如何获取变量" com $ num"并传递给" get_optimizer"功能?如何纠正以下脚本?请帮助,谢谢!

set num 1
foreach SQ {1 2 3 4 5} {
    ttk::combobox $twind.frame.dpcom$num -textvariable com$num -values {Global Definitive Adaptive Cmaes} 
    button $twind.frame.but$num -text "Optimizer Setting" -command [list get_optimizer]
    grid $twind.frame.dpcom$num -row $num -column 0
    grid $twind.frame.but$num   -row $num -column 1
    incr num}

proc get_optimizer {} {
    global [set com$num]
    if {[set com$num]=='Global'} { 
            ...
        } elseif {[set com$num]=='Definitive'} {
            ...
        } elseif {...} {
            ...}
        ...
    }

2 个答案:

答案 0 :(得分:1)

您应该将变量的整个名称传递给get_optimizer,然后使用upvar #0在过程中为该变量提供一个固定的本地别名。

    # backslash-newline for readability only
    button $twind.frame.but$num -text "Optimizer Setting" \
            -command [list get_optimizer com$num]
proc get_optimizer {varname} {
    upvar #0 $varname theVar
    if {$theVar=='Global'} { 
        ...
    } elseif {$theVar=='Definitive'} {
        ...
    } elseif {...} {
        ...
    }
    ...
}

此外,使用eq运算符进行字符串相等更有效。并考虑使用数组是否更好(即com(1)而不是com1)。

答案 1 :(得分:0)

使用

global com$num

(比如说,全球com1)

而不是

global [set com$num]

(比如说,给你全球权威)