我想在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 {...} {
...}
...
}
答案 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]
(比如说,给你全球权威)