Теорія:

Хід виконання програм із графічним інтерфейсом залежить від втручання користувача, який взаємодіє з програмою (натискає кнопки, вводить дані тощо, тобто створює події).
Подія — це зовнішній вплив на елемент керування, на який цей елемент може реагувати.
Для того, щоб програма відреагувала на подію, слід створити обробник події — блок програмного коду, який виконується при настанні події, з якою він пов’язаний. У Python обробником події є функція.
Функція — іменований блок коду.
Метод — це функція, що пов'язана з певним об'єктом.
Кожна функція має назву і може отримувати певні значення параметрів. У Python функції визначаються за допомогою зарезервованого слова def.
Синтаксис опису функції такий:
def <назва_функції>([перелік параметрів])
            <тіло функції>
Тіло функції являє собою послідовність операторів, які будуть виконані після викликання функції.
Створення обробників подій для об’єктів класу Button
Командна кнопка застосовується для запуску чи закінчення певного процесу.
Щоб прикріпити до віджета обробник події Натискання на кнопку, необхідно під час створення цього об’єкта в переліку параметрів параметру command присвоїти посилання на функцію, яка виконуватиметься в разі натискання.
 
91.PNG
 
Рис.1
Приклад:
Створимо кнопку із заголовком Натисни мене!, яка виводить повідомлення Клік! (рис. 2). У цьому коді функція button_clicked викликається щоразу, коли користувач натисне кнопку button1.
from tkinter import*
def button_clicked():
       print("Клік!")
root = Tk()
button1 = Button(root, bg = "red", text = "Натисни мене!", command = button_clicked)
button1.pack()
root.mainloop()
92.PNG
 
Рис.2
Програмування реакції об’єктів на події
Можна зробити так, щоб об’єкт змінював свої властивості у відповідь на натискання зазначеної клавіші клавіатури або миші.
Віджет із подією й функцією-обробником події пов’язують викликом методу bind() (рис.3):
<віджет>.bind('<подія>', <функція>), де '<подія>' — текстова константа, системна назва події; <функція> — назва функції-обробника події.
 
93.PNG 
 
Рис.3

Наприклад, віджет — напис Label, подія — клацання по ньому лівою кнопкою миші, дія — пересування напису вправо на 5 пікселів.
Щоб натискання клавіш отримував саме напис, слід надати йому фокус (зробити об’єкт активним) викликом методу focus_set(). Прибрати фокус з об’єкта можна викликом методу focus_get().
Приклад:
Запрограмуємо пересування віджета lab класу Label за натисканням на клавішу зі стрілкою →.
from tkinter import*
def move_lab(event):
              event.widget.place(x = event.widget.winfo_x()+5)
root = Tk()
lab = Label(root, text = 'Hello World!')
lab.place(x = 10, y = 30)
Приклад:
lab.focus_set()
lab.bind('<KeyPress-Right>', move_lab)
root.mainloop()
В обробнику події move_lab() з об’єкта event за допомогою атрибута widget здійснюється доступ до об’єкта, для якого обробляється подія.
Методи winfo_x() і winfo_y() цього об’єкта повертають його координати x і y відносно вікна.
Форми назв подій:
Один символ — натискання клавіші клавіатури:
root.bind('z', action)

Функцію action буде викликано для віджета у вікні root, який має фокус, кожного разу, коли натиснуто клавішу z. Клавіши літер можна записувати без кутових дужок (наприклад, 'z').
  • '<Return>' — натискання клавіші Enter.
  • '<Enter>' — входження вказівника миші в межі віджета.
  • '<KeyPress-Up>', '<KeyPress-Down>', '<KeyPress-Left>', '<KeyPress-Right>' — натискання клавіш керування курсором.
  • '<Key>' — натискання будь-якої клавіші.
  • '<Button-1>' або '<1>' – клік лівою кнопкою миші.
  • '<Button-2>' — клік середньою кнопкою миші.
  • '<Button-3>' — клік правою кнопкою миші.
  • '<Double-Button-1>' або '<Double-1>' — подвійний клік лівою кнопкою миші.
  • '<Motion>' — рух миші.
Функція, яку буде викликано при настанні події, повинна приймати один аргумент. Це об’єкт класу Event, що має, серед інших, атрибути, які стануть вам у нагоді при створенні програм — наприклад, щоб змусити об’єкти рухатися по вікну:
  • х і y — координати вказівника миші на віджеті;
  • keysym — набраний на клавіатурі символ;
  • keysym_num — код набраного на клавіатурі символу.
Приклад:
Запрограмуємо вибір віджета у вікні лівою кнопкою миші і пересування віджета за натисканням на клавішу зі стрілками. При клацанні лівою кнопкою миші по віджету викликається функція focus_widget(event), яка надає віджету фокус. При натисканні будь-якої клавіші викликається функція move_lab(event). dx, dy — це величина зсуву віджета після натискання на клавішу зі стрілкою.
 
from tkinter import*
def focus_widget(event):  # Обробник клацання лівою кнопкою миші
        event.widget.focus_set()
def move_lab(event):  # Обробник натискання на клавішу зі стрілкою 
       if event.keysym == 'Up': #Аналіз натиснутої клавіші
           dx=0
           dy= -3
       elif event.keysym == 'Down':
           dx=0
           dy= 3
       elif event.keysym == 'Left':
           dx=-3
           dy= 0
       elif event.keysym == 'Right':
           dx=3
           dy= 0
       # Пересування віджета на dx по горизонталі, dy по вертикалі.
       event.widget.place(x = event.widget.winfo_x()+dx,y = event.widget.winfo_y()+dy )
root = Tk()
lab1 = Label(root, text = 'Hello World!')
lab1.place(x = 10, y = 30)
lab2 = Label(root, text = '*********')
lab2.place(x = 10, y = 100)
root.bind("<1>", focus_widget)
root.bind('<Key>', move_lab)
root.mainloop()
Зверни увагу!
Обробник події має бути описаний вище, ніж виклик обробника події. Найчастіше опис функції-обробника події записують на початку тексту програми.
Джерела:

Інформатика : підруч. для 8 кл. закл. загал. серед. освіти / [О. О. Бондаренко, . В. Ластовецький, О. П. Пилипчук, Є. А. Шестопалов]. — Харків : Вид-во Ранок», 2021