识别选中的组合框

Identify combobox that is selected

我想更改组合框中所选项目的前景色。组合框本身是从 for 循环创建的。一个

这是我正在尝试的示例:

package require Tk
toplevel .win2
set Default zero
for {set i 0} {$i <=10} {incr i} {
    ttk::combobox .win2.c_Numbers\_$i -textvariable Default -style TCombobox -values \
    [list {one} {two} {threre} {four} {five} {six} ]
    grid config .win2.c_Numbers\_$i  -column 0 -row $i  -sticky "w"
    bind .win2.c_Numbers\_$i  <<ComboboxSelected>> {change [%W get]}
}
proc change {var1} { 
    puts "Selected Number: $var1"
    ttk::style configure TCombobox -foreground red
    }

选择单个条目后,所有条目都显示为红色。 我知道 <<ComboboxSelected>> 为那个特定的组合框生成一个内部 'call' 通过在 puts "Selected Number: $var1" 中请求它时返回选定的条目。 有没有办法让 <<ComboboxSelected>> 输出所选组合框的 identifier/name。然后我就可以只为那个特定组合框的条目着色....或者是否有我没有看到的解决方法?

提前感谢您的建议。

%W 是被选中的特定组合框。 %W get 从该组合框中获取所选项目。所以如果你这样做:

package require Tk
toplevel .win2
set Default zero
for {set i 0} {$i <=10} {incr i} {
    ttk::combobox .win2.c_Numbers_$i -textvariable Default -style TCombobox -values \
    [list {one} {two} {three} {four} {five} {six} ]
    grid config .win2.c_Numbers_$i  -column 0 -row $i  -sticky "w"
    bind .win2.c_Numbers_$i <<ComboboxSelected>> {change %W [%W get]}
}
proc change {w var1} { 
    puts "Selected combobox: $w"
    puts "Selected Number: $var1"
    ttk::style configure TCombobox -foreground red
}

您可以使用 $w 从那里添加其他功能。