События
В системе современного графического интерфейса имеется
возможность отслеживать различные события, связанные с клавиатурой и
мышью, и происходящие на «территории» того или иного виджета. В Tk
события описываются в виде текстовой строки — шаблона события,
состоящего из трех элементов (модификаторы, тип события и детализация
события).| Тип события | Содержание события |
|---|---|
Activate |
Активизация окна |
ButtonPress |
Нажатие кнопки мыши |
ButtonRelease |
Отжатие кнопки мыши |
Deactivate |
Деактивация окна |
Destroy |
Закрытие окна |
Enter |
Вхождение курсора в пределы виджета |
FocusIn |
Получение фокуса окном |
FocusOut |
Потеря фокуса окном |
KeyPress |
Нажатие клавиши на клавиатуре |
KeyRelease |
Отжатие клавиши на клавиатуре |
Leave |
Выход курсора за пределы виджета |
Motion |
Движение мыши в пределах виджета |
MouseWheel |
Прокрутка колесика мыши |
Reparent |
Изменение родителя окна |
Visibility |
Изменение видимости окна |
"" или просто "<3>"3> — щелчок правой кнопки мыши (то есть, третьей, если считать на трехкнопочной мыши слева–направо). ""
— двойной щелчок мышью (левой кнопкой) с нажатой кнопкой Shift. В
качестве модификаторов могут быть использованы следующие (список
неполный):Control, Shift, Lock,Button1–Button5 или B1–B5,Meta, Alt, Double, Triple.Просто символ обозначает событие — нажатие клавиши. Например, «
k» — тоже, что "" . Для неалфавитно–цифровых клавиш есть специальные названия:Cancel, BackSpace, Tab, Return, Shift_L, Control_L, Alt_L,Pause, Caps_Lock, Escape, Prior, Next, End, Home, Left,Up, Right, Down, Print, Insert, Delete, F1, F2, F3, F4, F5, F6, F7,F8, F9, F10, F11, F12, Num_Lock, Scroll_Lock, space, lessЗдесь
обозначает пробел, а — знак меньше. , , , — стрелки. , — это PageUp и PageDown. Остальные клавиши более или менее соответствуют надписям на стандартной клавиатуре.Примечание: Следует заметить, что
Shift_L, в отличие от Shift, нельзя использовать как модификатор.В конкретной среде комбинации, означающие что–то особенное в системе, могут не дойти до графического приложения. Например, известный всем Ctrl–Alt–Del.
Следующая программа позволяет печатать направляемые виджету события, в частности — keysym, а также анализировать, как различные клавиши можно представить в шаблоне события:
from Tkinter import *tk = Tk() # основное окно приложенияtxt = Text(tk) # текстовый виджет, принадлежащий окну tktxt.pack() # располагается менеджером pack# функция обработки событияdef event_info(event): txt.delete("1.0", END) # удаляется с начала до конца текста for k in dir(event): # цикл по атрибутам события if k[0] != "_": # берутся только неслужебные атрибуты # готовится описание атрибута события ev = "%15s: %s\n" % (k, repr(getattr(event, k))) txt.insert(END, ev) # добавляется в конец текста# привязывается виджету txt функция event_info для обработки событий,# соответствующих шаблону txt.bind("", event_info) tk.mainloop() # главный цикл обработки событийПри нажатии клавиши Esc в окне можно увидеть примерно следующее:
char: '\x1b' delta: 9 height: 0 keycode: 9 keysym: 'Escape'keysym_num: 65307 num: 9send_event: False serial: 159 state: 0 time: -1072960858 type: '2' widget: width: 0 x: 83 x_root: 448 y: 44 y_root: 306Следует объяснить некоторые из этих атрибутов:
•
char Нажатый символ (для некоторых событий — ??)•
height, width Высота и ширина.•
focus Был ли в момент события фокус у окна?•
keycode Код символа (скан–код клавиатуры).•
keysym Символическое имя клавиши.•
serial Серийный номер события. Увеличивается по мере возникновения событий.•
time Время возникновения события. Все время увеличивается.•
widget Виджет, в котором возникло событие.•
x, y Координаты указателя в виджете во время события.•
x_root, y_root Координаты указателя на экране во время события.В принципе, совсем необязательно, чтобы события обрабатывал тот же виджет, который их первично принял. Например, можно перенаправить все события внутри подчиненных виджетов на данный виджет с помощью метода
grab_set() (grab_release()
освобождает виджет от этой обязанности). В Tk существуют и другие
возможности управления событиями, которые можно изучить по документации.
Комментариев нет:
Отправить комментарий