event
Определение виртуальных событий и генерация событий
СИНТАКСИС
event параметр ?арг арг ...?
ОПИСАНИЕ
Команда event обеспечивает различные
возможности работы с событиями, включая определение виртуальных
событий и синтезирование событий. У команды есть несколько
различных форм, которые задаются первым аргументом. В настоящее
время поддерживаются следующие формы команды:
- event add <<виртуальное>>
последовательность ?последовательность...?
- Связывает виртуальное событие с
последовательностями физических событий, указываемыми
аргументами последовательность; в результате
выполнение одной из указанных последовательностей
событий приводит к возникновению виртуального
события. Аргумент виртуальное может быть произвольной
строкой, а последовательность может принимать любое
значение, допустимое для аргумента последовательность
команды bind. Если
виртуальное событие уже определено, то новая
последовательность физических событий добавляется к списку уже
имеющихся последовательностей.
- event delete
<<виртуальное>> ?последовательность
последовательность ..?
- Удаляет все указанные последовательности из списка
связанных с данным виртуальным событием. Аргумент
виртуальное может быть произвольной строкой, а
последовательность может принимать любое значение,
допустимое для аргумента последовательность команды
bind. Если
последовательность не связана с данным
виртуальным событием в текущий момент, то она
игнорируется. Если аргумент последовательность
отсутствует, то из списка удаляются все последовательности
физических событий и данное виртуальное событие не
может быть более осуществлено.
- event generate окно событие
?параметр значение параметр значение ...?
- Генерирует событие в окне и обеспечивает его обработку таким
образом, как если бы оно поступило из менеджера окон. Аргумент
окно задает имя пути окна, в котором будет
генерироваться событие; его значением может быть и
идентификатор окна (такой же, какой служит результатом команды
winfo id), если он относится к окну в текущем
приложении. Аргумент событие задает описание события,
например, в виде <Shift-Button-2> или
<<Paste>>. Аргумент
событие может принимать любое значение, допустимое
для аргумента последовательность команды bind, за исключением
того, что он должен состоять из одного, а не из нескольких
событий. Пары параметр-значение можно использовать
для установки значений дополнительных параметров события,
например, координат курсора "Мыши" ниже
(см. "ПОЛЯ СОБЫТИЯ"). Если
параметр -when не задан, то событие
обрабатывается немедленно; все программы обработки события
будут выполнены до завершения команды event
generate. В противном случае момент обработки
определяется значением параметра -when.
- event info
?<<виртуальное>>?
- Возвращает информацию о виртуальных событиях. Если аргумент
<<виртуальное>> опущен, то возвращается
список всех виртуальных событий, определенных в текущий
момент. Если аргумент <<виртуальное>>
задан, то возвращаемое значение представляет собой список,
элементы которого являются последовательностями физических
событий, связанными с данным виртуальным событием; если
указанное виртуальное событие не определено, то команда
возвращает пустую строку.
ПОЛЯ СОБЫТИЯ
Команда event generate поддерживает следующие
параметры, которые соответствуют расширению % в
скриптах привязки для команды bind.
- -above окно
- Аргумент окно задает поле
above для события либо в виде имени
пути окна либо в виде целочисленного идентификатора
окна. Параметр имеет смысл для событий
Configure. Параметр соответствует подстановке
%a для скриптов привязки.
- -borderwidth размер
- Параметр размер представляет собой расстояние на
экране; задает значение поля border_width
события. Параметр имеет смысл для событий
Configure. Параметр соответствует подстановке
%B для скриптов привязки.
- -button число
- Значением параметра число должно быть целое число;
задает значение поля detail для события
ButtonPress или
ButtonRelease, подавляя номер кнопки,
задаваемый параметром события base. Параметр
соответствует подстановке %b для скриптов
привязки.
- -count число
- Значением параметра число должно быть целое число;
задает значение поля count для
события. Параметр имеет смысл для событий
Expose. Параметр соответствует подстановке
%c для скриптов привязки.
- -detail детальность
Параметр задает значение поля detail для
события и может принимать следующие значения:
- NotifyAncestor
- NotifyDetailNone
- NotifyInferior
- NotifyNonlinear
- NotifyNonlinearVirtual
- NotifyPointer
- NotifyPointerRoot
- NotifyVirtual
Имеет смысл для событий Enter,
Leave, FocusIn и
FocusOut. Параметр соответствует
подстановке %d для скриптов привязки.
- -focus булевское
- Параметр булевское принимает булевские значения; он
задает значение поля focus для события. Имеет
смысл для событий Enter и
Leave. Параметр соответствует подстановке
%f для скриптов привязки.
- -height размер
- Параметр размер представляет собой расстояние на
экране; задает значение поля height
события. Параметр имеет смысл для событий
Configure. Параметр соответствует подстановке
%h для скриптов привязки.
- -keycode число
- Значением параметра число должно быть целое число;
задает значение поля keycode для
события. Параметр имеет смысл для событий
KeyPress и
KeyRelease. Параметр соответствует
подстановке %k для скриптов привязки.
- -keysym имя
- Значением параметра имя должно быть имя допустимого
символа клавиатуры, например, g,
пробел или Return; код этого
символа используется в качестве значения поля
keycode события, подавляя значение
детальности, заданное аргументом base
события. Имеет смысл для событий KeyPress и
KeyRelease. Параметр соответствует
подстановке %K для скриптов привязки.
- -mode уведомление
- Параметр уведомление задает значение поля
mode для события; он должен принимать одно из
значений NotifyNormal,
NotifyGrab, NotifyUngrab или
NotifyWhileGrabbed. Имеет смысл для событий
Enter, Leave,
FocusIn и FocusOut. Параметр
соответствует подстановке %m для скриптов
привязки.
- -override булевское
- Значение параметра булевское должно быть булевским;
он задает значение поля override_redirect для
события. Имеет смысл для событий Map,
Reparent и
Configure. Параметр соответствует подстановке
%o для скриптов привязки.
- -place где
- Параметр где задает значение поля
place для события; может принимать значения
PlaceOnTop или
PlaceOnBottom. Имеет смысл для событий
Circulate. Параметр соответствует подстановке
%p для скриптов привязки.
- -root окно
- Аргумент окно задает поле root для
события либо в виде имени пути окна, либо в виде
целочисленного идентификатора окна. Имеет смысл для событий
KeyPress, KeyRelease,
ButtonPress, ButtonRelease,
Enter, Leave и
Motion. Параметр соответствует подстановке
%R для скриптов привязки.
- -rootx коорд
- Параметр коорд представляет собой расстояние на
экране; задает значение поля x_root
события. Параметр имеет смысл для событий
KeyPress, KeyRelease,
ButtonPress, ButtonRelease,
Enter, Leave и
Motion. Параметр соответствует подстановке
%X для скриптов привязки.
- -rooty коорд
- Параметр коорд представляет собой расстояние на
экране; задает значение поля y_root
события. Параметр имеет смысл для событий
KeyPress, KeyRelease,
ButtonPress, ButtonRelease,
Enter, Leave и
Motion. Параметр соответствует подстановке
%Y для скриптов привязки.
- -sendevent булевское
- Значение параметра булевское должно быть булевским;
он задает значение поля send_event для
события. Имеет смысл для всех событий. Параметр соответствует
подстановке %E для скриптов привязки.
- -serial число
- Значение параметра должно быть целым числом; задает значение
поля serial для события. Имеет смысл
для всех событий. Параметр соответствует подстановке
%# для скриптов привязки.
- -state состояние
- Параметр задает значение поля state для
события. Для событий KeyPress,
KeyRelease, ButtonPress,
ButtonRelease, Enter,
Leave и Motion значение
параметра должно быть целым. Для событий
Visibility параметр может принимать одно из
значений VisibilityUnobscured,
VisibilityPartiallyObscured или
VisibilityFullyObscured. Этот параметр
подавляет любые модификаторы, например, Meta
или Control, указанные в основном
событии. Параметр соответствует подстановке
%s для скриптов привязки.
- -subwindow окно
- Аргумент окно задает поле
subwindow для события либо в виде имени пути
примитива event, либо в виде целочисленного идентификатора
окна. Имеет смысл для событий KeyPress,
KeyRelease, ButtonPress,
ButtonRelease, Enter,
Leave и Motion. Аналогичен
подстановке %S для скриптов привязки.
- -time целое
- Параметр должен иметь целое значение; задает значение поля
time для события. Имеет смысл для событий
KeyPress, KeyRelease,
ButtonPress, ButtonRelease,
Enter, Leave,
Motion и Property. Параметр
соответствует подстановке %t для скриптов
привязки.
- -width размер
- Параметр размер представляет собой расстояние на
экране; задает значение поля width
события. Параметр имеет смысл для событий
Configure. Параметр соответствует подстановке
%w для скриптов привязки.
- -when когда
Параметр когда задает момент обработки события;
должен принимать одно из следующих значений:
- now
- Событие обрабатывается немедленно, до завершения
выполнения команды. То же самое происходит и в случае,
если параметр -when опущен.
- tail
- Устанавливает событие в очередь событий Tcl вслед за
всеми стоящими в этой очереди событиями данного
приложения.
- head
- Устанавливает событие в начало очереди событий Tcl; оно
будет обработано перед остальными событиями, уже стоящими
в очереди.
- mark
- Устанавливает событие в начало очереди событий Tcl, но
вслед за всеми событиями, вставшими в очередь посредством
указания параметра -when. Такая
возможность полезна при генерации последовательности
событий, которые должны быть обработаны одно за другим, но
перед всеми событиями уже стоящими в очереди.
- -x коорд
- Параметр коорд представляет собой расстояние на
экране; задает значение поля x
события. Параметр имеет смысл для событий
KeyPress, KeyRelease,
ButtonPress, ButtonRelease,
Enter, Leave,
Motion, Expose,
Configure, Gravity и
Reparent. Параметр соответствует подстановке
%x для скриптов привязки.
- -y коорд
- Параметр коордпредставляет собой расстояние на
экране; задает значение поля y
события. Параметр имеет смысл для событий
KeyPress, KeyRelease,
ButtonPress, ButtonRelease,
Enter, Leave,
Motion, Expose,
Configure, Gravity и
Reparent. Параметр соответствует подстановке
%y для скриптов привязки.
Значением всякого параметра, не указанного при генерации
события, становится 0, за исключением параметра
serial, которому присваивается серийный номер
очередного X события.
ПРИМЕРЫ ВИРТУАЛЬНЫХ СОБЫТИЙ
Для обращения к привязке к виртуальному событию необходимо
выполнение двух условий. Во-первых, это виртуальное событие
должно быть определено командой event
add. Во-вторых, к этому виртуальному событию должна
быть создана привязка с помощью команды bind.
Рассмотрим следующие определения виртуальных событий:
event add <<Paste>> <Control-y>
event add <<Paste>><Button-2>
event add <<Save>> <Control-X><Control-S>
event add <<Save>> <Shift-F12>
В команде bind привязка к виртуальным событиям
осуществляется так же, как и ко встроенным типам событий:
bind Entry <<Paste>> {%W insert[selection get]}
Двойные угловые скобки показывают, что выполняется привязка к
виртуальному событию. При нажатии клавиш
Control-y или кнопки 2 .Мыши. или при
синтезировании виртуального события
<<Paste>> командой event
generate будет выполнена привязка
<<Paste>>.
Если последовательность в виртуальном событии в точности
совпадает с последовательностью в другом физическом событии, то
преимуществом пользуется физическое событие. Рассмотрим
следующий пример:
event add <<Paste>> <Control-y> <Meta-Control-y>
bind Entry <Control-y> {puts Control-y}
bind Entry <<Paste>> {puts Paste}
При нажатии на клавиши Control-y будет
выполнена привязка <Control-y>, так как
физическое событие считается более конкретным, чем виртуальное,
а в остальном все одинаково. Однако при нажатии клавиш
Meta-Control-y будет выполнена привязка
<<Paste>>, так как модификатор
Meta в физическом образце, связанном с
виртуальной привязкой, более конкретен, чем последовательность
<Control-y> для физического события.
Привязки к виртуальному событию можно создавать и до
определения самого события. На самом деле определение
виртуального события не является необходимым, например, на
платформах, где конкретное виртуальное событие может оказаться
бессмысленным или не генерируемым.
При изменении определения виртуального события в процессе
выполнения все окна немедленно переключаются на новое
определение. Если, в условиях предыдущего примера, выполнить
команды
bind <Entry> <Control-y> {}
event add <<Paste>> <Key-F6>
то поведение события изменится в двух направлениях. Во-первых,
всплывет подавленная привязка
<<Paste>>. Нажатие на клавиши
Control-y приведет теперь не к выполнению
привязки <Control-y>, а к выполнению
виртуального события <<Paste>>.
Во-вторых, нажатие на клавишу F6 также приведет
к выполнению привязки <<Paste>>.
Если последовательность не связана с данным
виртуальным событием в текущий момент, то она
игнорируется. Если аргумент последовательность
отсутствует, то из списка удаляются все последовательности
физических событий и данное виртуальное событие не
может быть более осуществлено.
event generate окно событие параметр значение параметр значение ...
Генерирует событие в окне и обеспечивает его обработку таким
образом, как если бы оно поступило из менеджера окон. Аргумент
окно задает имя пути окна, в котором будет
генерироваться событие; его значением может быть и идентификатор
окна (такой же, какой служит результатом команды winfo
id), если он относится к окну в текущем
приложении. Аргумент событие задает описание события,
например, в виде <Shift-Button-2> или
<<Paste>>. Аргумент
событие может принимать любое значение, допустимое для
аргумента последовательность команды
bind, за исключением того, что он должен
состоять из одного, а не из нескольких событий. Пары
параметр-значение можно использовать для установки
значений дополнительных параметров события, например, координат
курсора "Мыши" ниже (см. "ПОЛЯ СОБЫТИЯ"). Если
параметр -when не задан, то событие
обрабатывается немедленно; все программы обработки события будут
выполнены до завершения команды event
generate. В противном случае момент обработки
определяется значением параметра -when.
event info <<виртуальное>>
Возвращает информацию о виртуальных событиях. Если аргумент
<<виртуальное>>
опущен, то возвращается список всех виртуальных событий,
определенных в текущий момент. Если аргумент
<<виртуальное>>
задан, то возвращаемое значение представляет собой список,
элементы которого являются последовательностями физических
событий, связанными с данным виртуальным событием; если
указанное виртуальное событие не определено, то команда
возвращает пустую строку.