繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM