bind
-
НАЗВАНИЕ
- bind — Организация вызова скриптов Tcl для событий X
- СИНТАКСИС
- ВВЕДЕНИЕ
- ШАБЛОНЫ СОБЫТИЙ
- МОДИФИКАТОРЫ
- ТИПЫ СОБЫТИЙ
-
Activate, Deactivate
- MouseWheel
- KeyPress, KeyRelease
- ButtonPress, ButtonRelease, Motion
- Configure
- Map, Unmap
- Visibility
- Expose
- Destroy
- FocusIn, FocusOut
- Enter, Leave
- Property
- Colormap
- MapRequest, CirculateRequest, ResizeRequest, ConfigureRequest, Create
- Gravity, Reparent, Circulate
- MouseWheel
-
%%
- %#
- %a
- %b
- %c
- %d
- %f
- %h
- %i
- %k
- %m
- %o
- %p
- %s
- %t
- %w
- %x, %y
- %A
- %B
- %D
- %E
- %K
- %M
- %N
- %P
- %R
- %S
- %T
- %W
- %X, %Y
- %#
Имя
bind — Организация вызова скриптов Tcl для событий XСинтаксис
bind тег ?последовательность? ?+??скрипт?Введение
Команда bind связывает скрипты Tcl с событиями X. Если все три аргумента указаны, bind организует вызов скрипта (скрипта Tcl) каждый раз, когда происходит событие(я), заданное последовательностью, в окне(ах), идентифицированных тегом. Если скрипт предваряется «+», то он добавляется к любому существующему связыванию для последовательности; в противном случае скрипт заменяет любое существующее связывание. Если скрипт является пустой строкой, то текущее связывание для последовательности уничтожается, оставляя последовательность без связи. Во всех случаях, когда предоставлен аргумент скрипт, bind возвращает пустую строку.Если последовательность указана без скрипта, то возвращается скрипт, в настоящее время связанный с последовательностью, или возвращается пустая строка, если нет связывания для последовательности. Если ни последовательность, ни скрипт не указаны, то возвращаемое значение — список, элементы которого — все последовательности, для которых существуют связывания для тега.
Аргумент тег определяет, к каким окнам применяется связывание. Если тег начинается с точки, как в .a.b.c, то он должен быть именем пути к окну; в противном случае он может быть произвольной строкой. Каждое окно имеет связанный список тегов, и связывание применяется к конкретному окну, если его тег находится среди тегов, указанных для окна. Хотя команда bindtags может использоваться для присвоения произвольного набора тегов связывания окну, стандартные теги связывания обеспечивают следующее поведение:
- Если тег — имя внутреннего окна, связывание применяется к этому окну.
- Если тег — имя главного окна, связывание применяется к главному окну и всем его внутренним окнам.
- Если тег — имя класса виджетов, например Button, связывание применяется ко всем виджетам этого класса;
- Если тег имеет значение all, связывание применяется ко всем окнам приложения.
Шаблоны событий
Аргумент последовательность задает последовательность одного или нескольких шаблонов событий, с необязательными пробелами между шаблонами. Каждый шаблон события может иметь один из трех форм. В простейшем случае это один печатаемый символ ASCII, например a или [. Символ не может быть пробелом или символом <. Эта форма шаблона соответствует событию KeyPress для конкретного символа. Вторая форма шаблона более сложная, но более общая. Она имеет следующий синтаксис:<modifier-modifier-type-detail>Весь шаблон события заключен в угловые скобки. Внутри угловых скобок находятся ноль или более модификаторов, тип события и дополнительная информация (detail), определяющая конкретную кнопку или keysym. Любое из полей может быть опущено, если присутствует хотя бы одно из полей type и detail. Поля должны быть разделены пробелами или дефисами.
Третья форма шаблона используется для определения пользовательского, именованного виртуального события. Она имеет следующий синтаксис:
<<name>>Весь шаблон виртуального события заключен в двойные угловые скобки. Внутри угловых скобок находится пользовательское имя виртуального события. Модификаторы, такие как Shift или Control, не могут комбинироваться с виртуальным событием для его изменения. Связывания с виртуальным событием могут быть созданы до определения виртуального события, и если определение виртуального события изменяется динамически, все окна, связанные с этим виртуальным событием, немедленно реагируют на новое определение.
Некоторые виджеты (например, меню и текстовый) генерируют виртуальные события, когда их внутреннее состояние обновляется каким-либо образом. Подробности см. в руководстве по каждому виджету.
Модификаторы
Модификаторы состоят из следующих значений:Control
Mod1, M1, Command
Alt
Mod2, M2, Option
Shift
Mod3, M3
Lock
Mod4, M4
Extended
Mod5, M5
Button1, B1
Meta, M
Button2, B2
Double
Button3, B3
Triple
Button4, B4
Quadruple
Button5, B5
Meta и M относятся к любому из модификаторов M1 по M5, который ассоциирован с клавишей(ями) Meta на клавиатуре (keysyms Meta_R и Meta_L). Если нет клавиш Meta или они не связаны ни с какими модификаторами, то Meta и M не будут соответствовать ни одному событию. Аналогично, модификатор Alt относится к любому модификатору, связанному с клавишей(ями) Alt на клавиатуре (keysyms Alt_L и Alt_R).
Модификаторы Double, Triple и Quadruple — это удобный способ определения двойных щелчков мышью и других повторяющихся событий. Они заставляют определенный шаблон события повторяться 2, 3 или 4 раза, а также предъявляют требование по времени и пространству к последовательности: для соответствия последовательности событий шаблону Double, Triple или Quadruple, все события должны происходить близко друг к другу во времени и без существенного движения мышью между ними. Например, <Double-Button-1> эквивалентно <Button-1><Button-1> с дополнительными требованиями по времени и пространству.
Модификаторы Command и Option эквивалентны Mod1 соответственно Mod2, они соответствуют специфическим для Macintosh модификаторам клавиш.
Модификатор Extended в настоящее время специфичен для Windows. Он появляется в событиях, связанных с клавишами на «расширенной клавиатуре». На американской клавиатуре расширенные клавиши включают клавиши Alt и Control справа от клавиатуры, клавиши курсора в группе слева от цифрового блока, клавишу NumLock, клавишу Break, клавишу PrintScreen и клавиши / и Enter на цифровом блоке.
Типы событий
Поле type может быть любым стандартным типом события X, с несколькими дополнительными сокращениями. Поле type также будет принимать несколько нестандартных типов событий X, которые были добавлены для лучшей поддержки платформ Macintosh и Windows. Ниже приведен список всех допустимых типов; где вместе указаны два имени, они являются синонимами.Activate
Destroy
Map
ButtonPress, Button
Enter
MapRequest
ButtonRelease
Expose
Motion
Circulate
FocusIn
MouseWheel
CirculateRequest
FocusOut
Property
Colormap
Gravity
Reparent
Configure
KeyPress, Key
ResizeRequest
ConfigureRequest
KeyRelease
Unmap
Create
Leave
Visibility
Deactivate
- Activate, Deactivate
- Эти два события отправляются всем дочерним окнам главного окна при изменении их состояния. В дополнение к окну фокуса, платформы Macintosh и Windows имеют понятие активного окна (которое часто, но не обязательно, имеет фокус). На Macintosh виджеты в активном окне имеют другой вид, чем виджеты в неактивных окнах. Событие Activate отправляется всем дочерним окнам главного окна, когда оно меняет состояние с неактивного на активное. Аналогично, событие Deactivate отправляется, когда состояние окна меняется с активного на неактивное. Привязываться к этим событиям не требуется замена процентов.
- MouseWheel
- Многие современные мыши поддерживают колесо прокрутки, которое используется для прокрутки документов без использования полос прокрутки. При прокрутке колеса система будет генерировать события MouseWheel, которые приложение может использовать для прокрутки. Как и события Key, событие всегда направляется в окно, имеющее в данный момент фокус. При получении события вы можете использовать замену %D для получения поля delta события, которое является целочисленным значением, описывающим, как переместилось колесо мыши. Наименьшее значение, которое система будет сообщать, определяется ОС. Знак значения определяет, в каком направлении ваш виджет должен прокручиваться. Положительные значения должны прокручивать вверх, а отрицательные — вниз.
- KeyPress, KeyRelease
- События KeyPress и KeyRelease генерируются всякий раз, когда клавиша нажимается или отпускается. События KeyPress и KeyRelease отправляются в окно, которое в данный момент имеет фокус клавиатуры.
- ButtonPress, ButtonRelease, Motion
- События ButtonPress и ButtonRelease генерируются, когда пользователь нажимает или отпускает кнопку мыши. События Motion генерируются всякий раз, когда указатель перемещается. События ButtonPress, ButtonRelease и Motion обычно отправляются в окно, содержащее указатель.
При нажатии кнопки мыши окно, содержащее указатель, автоматически получает временный захват указателя. Последующие события ButtonPress, ButtonRelease и Motion будут отправляться в это окно, независимо от того, в какое окно попадает указатель, до тех пор, пока все кнопки не будут отпущены.
- Configure
- Событие Configure отправляется окну всякий раз, когда изменяются его размер, положение или ширина рамки, а также иногда при изменении его положения в порядке наложения.
- Map, Unmap
- События Map и Unmap генерируются всякий раз, когда изменяется состояние отображения окна.
Окна создаются в состоянии неотображения. Главные окна отображаются, когда они переходят в состояние нормальное, и скрываются в состояниях убрано и иконизировано. Другие окна отображаются, когда они помещаются под контроль менеджера геометрии (например, pack или grid).
Окно видимо только если оно и все его предки отображены. Обратите внимание, что менеджеры геометрии обычно не отображают своих потомков, пока сами не отображены, и скрывают всех потомков при скрытии себя; следовательно, в Tk события Map и Unmap указывают, видимо ли окно.
- Visibility
- Окно считается затемненным, когда другое окно над ним в порядке наложения полностью или частично перекрывает его. События Visibility генерируются всякий раз, когда изменяется состояние затемнения окна; поле state (%s) указывает новое состояние.
- Expose
- Событие Expose генерируется всякий раз, когда весь или часть окна должна быть перерисована (например, при первом отображении окна или если оно перестанет быть затемненным). Обычно приложениям-клиентам нет необходимости обрабатывать события Expose, так как Tk обрабатывает их внутренне.
- Destroy
- Событие Destroy передается окну при его уничтожении.
При получении события Destroy виджет находится в состоянии «полумертвого»: виджет все еще существует, но большинство операций с ним завершатся ошибкой.
- FocusIn, FocusOut
- События FocusIn и FocusOut генерируются всякий раз, когда меняется фокус клавиатуры. Событие FocusOut отправляется старому окну фокуса, а событие FocusIn — новому.
Кроме того, если старое и новое окна фокуса не имеют общего родителя, «виртуальные перекрестные» события фокуса отправляются промежуточным окнам в иерархии. Таким образом, событие FocusIn указывает, что целевое окно или одно из его потомков получило фокус, а событие FocusOut указывает, что фокус переключен на окно вне иерархии целевого окна.
Фокус клавиатуры может быть изменен явно с помощью вызова focus или неявно менеджером окон.
- Enter, Leave
- Событие Enter отправляется окну, когда указатель входит в это окно, а событие Leave — когда указатель покидает его.
Если активен захват указателя, события Enter и Leave передаются только окну, владеющему захватом.
Кроме того, когда указатель перемещается между двумя окнами, «виртуальные перекрестные» события Enter и Leave отправляются промежуточным окнам в иерархии аналогичным образом, как и для событий FocusIn и FocusOut.
- Property
- Событие Property отправляется окну всякий раз, когда изменяется или удаляется свойство X, принадлежащее этому окну. События Property обычно не доставляются приложениям Tk, так как они обрабатываются ядром Tk.
- Colormap
- Событие Colormap генерируется всякий раз, когда цветовая палитра, связанная с окном, была изменена, установлена или удалена.
Виджеты могут быть назначены частной цветовой палитре, указав опцию -colormap; менеджер окон отвечает за установку и удаление цветовых палитр по мере необходимости.
Обратите внимание, что Tk не предоставляет полезных данных для этого типа событий.
- MapRequest, CirculateRequest, ResizeRequest, ConfigureRequest, Create
- Эти события обычно не доставляются приложениям Tk. Они включены для полноты, чтобы можно было создавать менеджеры окон X11 в Tk. (Эти события передаются только тогда, когда клиент выбрал SubstructureRedirectMask для окна; ядро Tk не использует эту маску.)
- Gravity, Reparent, Circulate
- События Gravity и Reparent обычно не доставляются приложениям Tk. Они включены для полноты.
Событие Circulate указывает, что окно переместилось в верхнюю или нижнюю часть порядка наложения в результате запроса протокола XCirculateSubwindows. Обратите внимание, что порядок наложения может быть изменен по другим причинам, которые не генерируют событие Circulate, и что Tk не использует XCirculateSubwindows() внутренне. Этот тип события включен только для полноты; нет надежного способа отслеживать изменения положения окна в порядке наложения.
Подробности событий
Последняя часть длинного описания события — detail. В случае события ButtonPress или ButtonRelease это номер кнопки (1-5). Если указан номер кнопки, то совпадет только событие на этой конкретной кнопке; если номер кнопки не указан, то совпадет любое событие на любой кнопке. Примечание: указание конкретного номера кнопки отличается от указания модификатора кнопки; в первом случае это относится к нажатию или отпусканию кнопки, а во втором — к другой кнопке, которая уже нажата при возникновении соответствующего события. Если указан номер кнопки, то type можно опустить: он будет по умолчанию равен ButtonPress. Например, спецификатор <1> эквивалентен <ButtonPress-1>.Если тип события — KeyPress или KeyRelease, то detail может быть указан в виде символа X keysym. Keysym — это текстовое описание определённой клавиши на клавиатуре; они включают все буквенно-цифровые ASCII-символы (например, «a» — keysym для ASCII-символа «a»), а также описания символов, не являющихся буквенно-цифровыми («запятая» — keysym для запятой), плюс описания всех не-ASCII клавиш на клавиатуре (например, «Shift_L» — keysym для левой клавиши Shift, а «F1» — keysym для функциональной клавиши F1, если она есть). Полный список keysym здесь не представлен; он доступен в другой документации X и может отличаться в зависимости от системы. При необходимости можно использовать обозначение %K, описанное ниже, для вывода имени keysym для конкретной клавиши. Если указан detail keysym, то поле type можно опустить; оно будет по умолчанию равно KeyPress. Например, <Control-запятая> эквивалентно <Control-KeyPress-запятая>.
Связывание скриптов и подстановки
Аргумент script для команды bind — это скрипт Tcl, который будет выполняться всякий раз, когда происходит заданная последовательность событий. Команда будет выполнена в том же интерпретаторе, в котором была выполнена команда bind, и она будет запущена на глобальном уровне (доступны только глобальные переменные). Если script содержит какие-либо символы %, то скрипт не будет выполнен напрямую. Вместо этого будет сгенерирован новый скрипт путём замены каждого%, и символ, следующий за ним, с информацией из текущего события. Замена зависит от символа, следующего за %, как определено в списке ниже. Если не указано иное, строка замены — десятичное значение указанного поля из текущего события. Некоторые замены допустимы только для определенных типов событий; если они используются для других типов событий, заменяемое значение неопределено.- %%
- Заменяется на одиночный знак процента.
- %#
- Номер последнего запроса клиента, обработанного сервером (поле serial из события). Действительно для всех типов событий.
- %a
- Поле above из события, отформатированное как шестнадцатеричное число. Действительно только для событий Configure. Указывает окно-сиблинг, расположенное непосредственно под окном-получателем в порядке стекирования, или 0, если окно-получатель находится внизу.
- %b
- Номер нажатой или отпущенной кнопки. Действительно только для событий ButtonPress и ButtonRelease.
- %c
- Поле count из события. Действительно только для событий Expose. Указывает, что имеется count ожидающих событий Expose, которые еще не были доставлены в окно.
- %d
- Поле detail или user_data из события. %d заменяется строкой, идентифицирующей деталь. Для событий Enter, Leave, FocusIn и FocusOut строка будет одной из следующих:
NotifyAncestor
NotifyNonlinearVirtual
NotifyDetailNone
NotifyPointer
NotifyInferior
NotifyPointerRoot
NotifyNonlinear
NotifyVirtual
Above
Opposite
Below
None
BottomIf
TopIf
- %f
- Поле focus из события (0 или 1). Действительно только для событий Enter и Leave. 1, если окно-получатель является окном фокуса или потомком окна фокуса, 0 в противном случае.
- %h
- Поле height из события. Действительно для событий Configure, ConfigureRequest, Create, ResizeRequest и Expose. Указывает новый или запрошенный размер высоты окна.
- %i
- Поле window из события, представленное как шестнадцатеричное целое число. Действительно для всех типов событий.
- %k
- Поле keycode из события. Действительно только для событий KeyPress и KeyRelease.
- %m
- Поле mode из события. Заменяемая строка — одна из NotifyNormal, NotifyGrab, NotifyUngrab или NotifyWhileGrabbed. Действительно только для событий Enter, FocusIn, FocusOut и Leave.
- %o
- Поле override_redirect из события. Действительно только для событий Map, Reparent и Configure.
- %p
- Поле place из события, заменяемое одной из строк PlaceOnTop или PlaceOnBottom. Действительно только для событий Circulate и CirculateRequest.
- %s
- Поле state из события. Для событий ButtonPress, ButtonRelease, Enter, KeyPress, KeyRelease, Leave и Motion заменяется десятичной строкой. Для Visibility — одна из строк VisibilityUnobscured, VisibilityPartiallyObscured и VisibilityFullyObscured. Для событий Property — либо строка NewValue (указывает, что свойство было создано или изменено), либо Delete (указывает, что свойство было удалено).
- %t
- Поле time из события. Это временная метка сервера X (обычно время с момента последней перезагрузки сервера) в миллисекундах, когда произошло событие. Действительно для большинства событий.
- %w
- Поле width из события. Указывает новый или запрошенный размер ширины окна. Действительно только для событий Configure, ConfigureRequest, Create, ResizeRequest и Expose.
- %x, %y
- Поля x и y из события. Для событий ButtonPress, ButtonRelease, Motion, KeyPress, KeyRelease и MouseWheel %x и %y указывают положение указателя мыши относительно окна-получателя. Для событий Enter и Leave — положение, где указатель мыши пересек окно, относительно окна-получателя. Для событий Configure и Create — координаты x и y окна относительно его родительского окна.
- %A
- Заменяется символом Юникода, соответствующим событию, или пустой строкой, если событие не соответствует символу Юникода (например, была нажата клавиша Shift). XmbLookupString (или XLookupString, когда поддержка метода ввода выключена) выполняет всю работу по преобразованию из события в символ Юникода. Действительно только для событий KeyPress и KeyRelease.
- %B
- Поле border_width из события. Действительно только для событий Configure, ConfigureRequest и Create.
- %D
- Сообщает значение delta события MouseWheel. Значение delta представляет собой количество единиц поворота колесика мыши. Знак значения обозначает направление прокрутки колесика мыши.
- %E
- Поле send_event из события. Действительно для всех типов событий. 0 указывает, что это «нормальное» событие, 1 указывает, что это «синтетическое» событие, сгенерированное с помощью SendEvent.
- %K
- Символ клавиши, соответствующий событию, заменяемый как текстовая строка. Действительно только для событий KeyPress и KeyRelease.
- %M
- Количество сопоставленных шаблонов привязки на основе сценариев до сих пор для события. Действительно для всех типов событий.
- %N
- Символ клавиши, соответствующий событию, заменяемый как десятичное число. Действительно только для событий KeyPress и KeyRelease.
- %P
- Имя свойства, которое обновляется или удаляется (которое может быть преобразовано в XAtom с помощью winfo atom). Действительно только для событий Property.
- %R
- Идентификатор окна root из события. Действительно только для событий, содержащих поле root.
- %S
- Идентификатор окна subwindow из события, отформатированный как шестнадцатеричное число. Действительно только для событий, содержащих поле subwindow.
- %T
- Поле type из события. Действительно для всех типов событий.
- %W
- Имя пути окна, которому было сообщено событие (поле window из события). Действительно для всех типов событий.
- %X, %Y
- Поля x_root и y_root из события. Если используется менеджер виртуальной корневой системы, то заменяемые значения — соответствующая координата x и координата y в виртуальной корневой системе. Действительно только для событий ButtonPress, ButtonRelease, KeyPress, KeyRelease и Motion. Имеет то же значение, что и %x и %y, за исключением того, что относительно окна виртуальной корневой системы.
Строка замены для %-замены отформатирована как элемент списка Tcl. Это означает, что пробелы или специальные символы, такие как $ и {, могут предваряться обратными слешами. Это гарантирует, что строка будет передана в анализатор Tcl при оценке скрипта привязки. Большинство замен — числа или хорошо определенные строки, такие как Above; для этих замен никогда не требуется специальный формат. Наиболее распространенный случай, когда требуется переформатирование, — это замена %A. Например, если script —
insert %Aи введен квадратная скобка, то фактически выполняемый скрипт будет
insert \[Это заставит insert получить исходную строку замены (открытую квадратную скобку) в качестве первого аргумента. Если дополнительный обратный слеш не был добавлен, Tcl не смог бы правильно проанализировать скрипт.
Несколько совпадений
Возможны несколько привязок, соответствующих данному событию X. Если привязки связаны с разными тегами, то все привязки будут выполнены в порядке следования. По умолчанию привязка для виджета выполняется первой, затем привязка класса, привязка для его верхнего уровня и привязка all.bindtags команда может использоваться для изменения этого порядка для конкретного окна или для ассоциации дополнительных тегов привязки с окном.Команды continue и break могут быть использованы внутри скрипта привязки для управления обработкой соответствующих скриптов. Если вызвана команда continue, то текущий скрипт привязки завершается, но Tk продолжит обработку скриптов привязки, связанных с другими метками. Если команда break вызвана внутри скрипта привязки, то этот скрипт завершается, и другие скрипты не будут вызваны для события.
Если более чем одна привязка соответствует определённому событию и они имеют одинаковый тег, то выбирается наиболее конкретная привязка, и её скрипт оценивается. Следующие тесты применяются, в порядке очереди, чтобы определить, какая из нескольких соответствующих последовательностей более специфична:
- Шаблон события, который указывает на определённую кнопку или клавишу, более специфичен, чем тот, который этого не делает;
- Более длинная последовательность (с точки зрения количества сопоставленных событий) более специфична, чем более короткая последовательность;
- Если модификаторы, указанные в одном шаблоне, являются подмножеством модификаторов в другом шаблоне, то шаблон с большим количеством модификаторов более специфичен.
- Виртуальное событие, физический шаблон которого соответствует последовательности, менее специфичен, чем тот же физический шаблон, который не связан с виртуальным событием.
- Учитывая последовательность, которая соответствует двум или более виртуальным событиям, одно из виртуальных событий будет выбрано, но порядок не определён.
Если сопоставленные последовательности содержат более одного события, то тесты (c)-(e) применяются в порядке от последнего события к самому раннему в последовательностях. Если эти тесты не определяют победителя, то самая последняя зарегистрированная последовательность является победителем.
Если существуют два (или более) виртуальных события, которые оба вызываются одной и той же последовательностью, и оба эти виртуальных события связаны с одним и тем же тегом окна, то только одно из виртуальных событий будет активировано, и оно будет выбрано случайным образом:
event add <<Paste>> <Control-y>
event add <<Paste>> <Button-2>
event add <<Scroll>> <Button-2>
bind Entry <<Paste>> {puts Paste}
bind Entry <<Scroll>> {puts Scroll} Если пользователь набирает Control-y, привязка <<Вставить>> будет вызвана, но если пользователь нажимает кнопку 2, то будет вызвана одна из привязок <<Вставить>> или <<Прокрутка>>, но точное событие не определено. Если событие X не соответствует ни одной из существующих привязок, то событие игнорируется. Несвязанное событие не считается ошибкой.
Последовательности из нескольких событий и игнорируемые события
Когда последовательность, указанная в команде bind, содержит более одного шаблона события, её скрипт выполняется всякий раз, когда недавние события (вплоть до и включая текущее событие) соответствуют заданной последовательности. Это означает, например, что если кнопка 1 нажимается многократно, последовательность <ДвойноеНажатиеКнопки-1> будет соответствовать каждому нажатию, но первому. Если в середине последовательности событий возникают посторонние события, которые препятствуют соответствию, то посторонние события игнорируются, если они не являются событиями KeyPress или ButtonPress. Например, <ДвойноеНажатиеКнопки-1> будет соответствовать последовательности нажатий кнопки 1, даже если между событиями ButtonPress будут события ButtonRelease (и, возможно, события Motion). Кроме того, событие KeyPress может предшествовать любому числу других событий KeyPress для клавиш-модификаторов без того, чтобы клавиши-модификаторы препятствовали соответствию. Например, последовательность событий aB будет соответствовать нажатию клавиши a, отпусканию клавиши a, нажатию клавиши Shift и нажатию клавиши b: нажатие Shift игнорируется, потому что это клавиша-модификатор. Наконец, если несколько событий Motion происходят подряд, только последнее используется для целей сопоставления последовательностей привязки.Ошибки
Если при выполнении скрипта для привязки возникает ошибка, используется механизм bgerror для сообщения об ошибке. Команда bgerror будет выполнена на глобальном уровне (вне контекста любой процедуры Tcl).Примеры
Организуйте вывод строки, описывающей движение мыши, когда двойной щелчок мыши:bind . <Double-1> {
puts "hi from (%x,%y)"
} Небольшая программа с графическим интерфейсом, которая отображает имя keysym последней нажатой клавиши:
set keysym "Press any key"
pack [label .l -textvariable keysym -padx 2m -pady 1m]
bind . <Key> {
set keysym "You pressed %K"
} См. также
bgerror, bindtags, event, focus, grab, keysyms
Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/TkCmd/bind.htm
Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/TkCmd/bind.htm