События, метод bind

При взаимодействии пользователя с приложением возникают различные события (нажата кнопка мыши, нажата клавиша на клавиатуре, пользователь перемещает курсор мыши).

Обработка событий

Обработать события (т.е. вызвать определённую функцию при настпулении определённого события) можно с помощью метода bind:

component.bind(event, function)

component - компонент, с которым происходит действие, event - событие, function - вызываемая функция.

События

Событие Описание
<Button-1> Нажатие кнопки мыши
<B1-Motion> Движение мыши с зажатой кнопкой мыши
<ButtonRelease-1> Отпускание нажатой кнопки мыши
<Double-Button-1> Двойной клик
<Triple-Button-1> Тройной клик
<Motion> Движение мыши
<Enter> Курсор мыши наведён на компонент
<Leave> Курсор мыши покинул область компонента
<Key> Нажатие любой клавиши на клавиатуре
q Нажатие клавиши q
<KeyRelease> Отпускание нажатой клавиши
<Return> Нажатие клавиши Enter

При указании событий мыши цифрой обозначается кнопка: 1 - левая, 2 - средняя (колёсико мыши), 3 - правая.

Параметр event

В функцию, вызываемую методом bind, передаётся аргумент event, который содержит информацию о событии (например, координаты мыши).

Событие мыши

Пример с событием мыши:

from tkinter import *

class WindowApplication:
    def __init__(self):
        self.root = Tk()
        self.root.bind('<Motion>', self.mouseMove)
        self.root.mainloop()

    def mouseMove(self, event):
        print(event)

WindowApplication()

При движении мыши будет отображаться информация о событии:

<Motion event state=Mod1 x=179 y=7>
<Motion event state=Mod1 x=178 y=8>
<Motion event state=Mod1 x=177 y=9>

Координаты можно получить следующим образом: event.x, event.y.

Событие клавиатуры

Пример с событием клавиатуры:

from tkinter import *

class WindowApplication:
    def __init__(self):
        self.root = Tk()
        self.root.bind('<Key>', self.keyPress)
        self.root.mainloop()

    def keyPress(self, event):
        print(event)

WindowApplication()

При нажатии клавиши будет отображаться информация о событии:

<KeyPress event state=Mod1 keysym=q keycode=81 char='q' x=285 y=329>

event.keysym - буквенный код клавиши (например, space - пробел), event.keycode - код клавиши, event.char - символ.