bindtags
Имя
bindtags — Определение привязок, применяемых к окну, и порядок их оценкиСинтаксис
bindtags window ?tagList?Описание
Когда привязка создаётся с помощью команды bind, она ассоциируется либо с конкретным окном, например, .a.b.c, именем класса, например, Button, ключевым словом all, или любой другой строкой. Все эти формы называются метками привязки. Каждое окно содержит список меток привязки, определяющий, как обрабатываются события для окна. Когда в окне происходит событие, оно применяется к каждой метке окна в определённом порядке: для каждой метки выполняется самая специфичная привязка, соответствующая данной метке и событию. Более подробную информацию о процессе сопоставления см. в команде bind.По умолчанию каждое окно имеет четыре метки привязки: имя окна, имя класса окна, имя ближайшего предка верхнего уровня и all в этом порядке. Окна верхнего уровня по умолчанию имеют только три метки, так как имя верхнего уровня совпадает с именем окна. Команда bindtags позволяет читать и изменять метки привязки окна.
Если команда bindtags вызвана только с одним аргументом, то текущий набор меток привязки для window возвращается в виде списка. Если аргумент tagList указан для bindtags, то он должен быть правильным списком; метки для window изменяются на элементы списка. Элементы tagList могут быть произвольными строками; однако любая метка, начинающаяся с точки, рассматривается как имя окна; если в момент обработки события окна с таким именем не существует, то метка игнорируется для этого события. Порядок элементов в tagList определяет порядок выполнения скриптов привязки в ответ на события. Например, команда
bindtags .b {all . Button .b} меняет порядок, в котором будут оцениваться скрипты привязки для кнопки с именем .b, так что сначала вызываются привязки all, затем привязки для верхнего уровня .b («.»), затем привязки класса, а затем привязки для .b. Если tagList — пустой список, то метки привязки для window возвращаются в исходное состояние, описанное выше. Команда bindtags может использоваться для добавления произвольных дополнительных меток привязки для окна или для удаления стандартных меток. Например, команда
bindtags .b {.b TrickyButton . all} заменяет метку Button для .b на TrickyButton. Это означает, что стандартные привязки виджетов для кнопок, связанные с меткой Button, больше не будут применяться к .b, но любые привязки, связанные с TrickyButton (возможно, новое поведение кнопки), будут применяться. Пример
Если у вас есть набор вложенных виджетов frame и вы хотите, чтобы события, отправленные виджету button, также доставлялись всем виджетам до текущего toplevel (в отличие от стандартного поведения Tk, где события не доставляются в эти промежуточные окна), чтобы упростить создание акселераторов, активных только для части окна, вы можете использовать вспомогательную процедуру, подобную этой:proc setupBindtagsForTreeDelivery {widget} {
set tags [list $widget [winfo class $widget]]
set w $widget
set t [winfo toplevel $w]
while {$w ne $t} {
set w [winfo parent $w]
lappend tags $w
}
lappend tags all
bindtags $widget $tags
} См. также
bind
Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/TkCmd/bindtags.htm
Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/TkCmd/bindtags.htm