Определить выбранный комбинированный список - PullRequest
0 голосов
/ 08 октября 2019

Я бы хотел изменить цвет переднего плана выбранного элемента в выпадающем списке. Сам комбобокс создается из цикла for. a

Вот пример того, что я пробую:

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>> генерирует внутренний "вызов" для этого конкретного списка, возвращая выбранную запись, запрашивая ее в puts "Selected Number: $var1". Есть ли способ для <<ComboboxSelected>> вывести идентификатор / имя выбранного выпадающего списка? Тогда я смогу раскрасить записи только этого конкретного выпадающего списка ... или есть обходной путь, которого я не вижу?

Заранее спасибо за ваши предложения.

1 Ответ

0 голосов
/ 08 октября 2019

%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.

...