projman/hlp/ru/tk/event.html
2018-02-05 17:23:37 +03:00

527 lines
32 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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