Вы можете привязать обработчик к событию на любом из трех уровней:
Привязка к экземпляру:
Вы можете привязать событие к одному конкретному виджету. Например, вы можете привязать клавишу PageUp в виджете холста к обработчику, который заставит холст прокрутиться на одну страницу вверх. Чтобы привязать событие виджета, вызовите метод .bind() этого виджета.
Например, предположим, что у вас есть виджет холста с именем self.canv, и вы хотите рисовать оранжевый шар на холсте всякий раз, когда пользователь нажимает кнопку мыши 2. Чтобы реализовать это поведение:
self.canv.bind('<Button-2>', self.__drawOrangeBlob)
Первый аргумент - это дескриптор последовательности, который сообщает Tkinter, что всякий раз, когда кнопка 2 мыши опускается, он должен вызывать обработчик событий с именем self.__drawOrangeBlob. (См. Раздел 54.6, "Написание обработчика: класс Event", ниже, для обзора того, как писать обработчики, такие как .__drawOrangeBlob()). Обратите внимание, что вы опускаете круглые скобки после имени обработчика, чтобы Python передал ссылку на обработчик, а не пытался вызвать его сразу.
Привязка к классу:
Вы можете привязать событие ко всем виджетам класса. Например, вы можете настроить все виджеты Button так, чтобы они реагировали на нажатие кнопки 2 мыши, меняя туда и обратно метки на английском и японском языках. Чтобы привязать событие ко всем виджетам класса, вызовите метод .bind_class() для любого виджета.
Например, предположим, что у вас есть несколько холстов, и вы хотите настроить кнопку мыши 2 на рисование оранжевого шара на любом из них. Вместо того чтобы вызывать .bind() для каждого из них, вы можете настроить их все одним вызовом, например, таким:
self.bind_class('Canvas', '<Button-2>', self.__drawOrangeBlob)
Привязка к приложению:
Вы можете настроить привязку таким образом, чтобы определенное событие вызывало обработчик независимо от того, какой виджет имеет фокус или находится под мышью. Например, вы можете привязать клавишу PrintScrn ко всем виджетам приложения, чтобы она выводила на печать экран независимо от того, какой виджет получил эту клавишу. Чтобы привязать событие на уровне приложения, вызовите метод .bind_all() для любого виджета.
Вот как можно связать ключ PrintScrn, "имя ключа" которого - 'Print':
self.bind_all('<Key-Print>', self.__printScreen)