Список в tk/tcl

Помогите пожалуйста решить проблему со списком в TCL. Я создал следующий список:

listbox .lb1 -height 6 -width 10 -selectmode browse
.lb1 insert 0 "String 1" "String 2" "String 3" "String 4" "String 5" "String  6"

label .label1 -text [.lb1 get active]
button .butt1 -text "enter" -command {.label1 configure -text [.lb1 get active]}
pack .label1 .lb1 .butt1 -expand yes -fill both

Как я могу автоматически изменить содержимое метки «label1» без использования кнопки «butt1»?

Я хочу, чтобы содержимое «label1» менялось сразу же, когда я нажимаю на один из элементов списка.

Спасибо!


person Azad Mamedov    schedule 06.01.2016    source источник


Ответы (1)


Когда вы выбираете элемент в списке, он отправляет <<ListboxSelect>> самому себе. Вы можете привязаться к этому, чтобы реагировать на изменения выбора:

bind .lb1 <<ListboxSelect>> {.label1 configure -text [.lb1 get active]}

Обратите внимание, что вы также очень близко подходите к моменту, когда рекомендуется использовать вспомогательную процедуру. Даже для чего-то простого, подобного этому, становится проще писать, тестировать и отлаживать.

proc SelectionHappened {listbox label} {
    set activeItem [$listbox get active]
    $label configure -text $activeItem
}
bind .lb1 <<ListboxSelect>> {SelectionHappened .lb1 .label1}
person Donal Fellows    schedule 06.01.2016