我想在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 {...} {
...}
...
}发布于 2017-08-24 14:41:15
您应该将变量的全名传递给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)是否更好。
发布于 2017-08-24 14:15:09
使用
global com$num(给你,比方说,全局com1)
而不是
global [set com$num](给你,比方说,全球权威)
https://stackoverflow.com/questions/45851603
复制相似问题