2017-08-24 18 views
0

我想在for循環中生成幾個組合框和按鈕,按鈕命令將調用該函數並檢查組合框的內容,如何獲取變量「com $ num」並傳遞給「get_optimizer」函數?如何糾正下面的腳本?請幫助,謝謝!TCL/TK如何在for循環中生成comboboxs /按鈕並調用函數?

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

使用

global com$num 

(給你的,比方說,全球COM1)

,而不是

global [set com$num] 

(給你的,比方說,全球權威)

+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)。

+0

太棒了!這真的是我想要的,非常感謝你! – Jimmy