[英]TCL/TK How to generate comboboxs/buttons in the for loop and call the function?
我想在for循环中生成几个组合框和按钮,而button命令将调用该函数并检查组合框的内容,如何获取变量“ 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 {...} {
...}
...
}
您应该将变量的全名传递给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
)是否更好。
采用
global com$num
(例如,给您全局com1)
代替
global [set com$num]
(例如,为您提供全局权威性)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.