Форми назв подій:
• Один символ — натискання клавіші клавіатури:
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 — код набраного на клавіатурі символу.
Клас Button
Командна кнопка застосовується для запуску чи закінчення певного процесу.
Під час створення об’єкта Button можна задати властивості для налаштування вигляду кнопки text (текстовий рядок), width (ширина), height(висота), bg (колір тла), fg (колір символів), font (параметри шрифту).
Для розташування об’єкта у вікні використовуються методи-пакувальники:
змінна.place(x, y), де параметри x і y установлюють зміщення елемента по горизонталі й вертикалі відносно верхнього лівого кута вікна;
змінна.pack() — розташування об'єкта нижче попередньо створеного.
Якщо не застосувати метод-пакувальник, то напис у вікні так і не з’явиться, хоча він є в програмі.
Приклад:
Створимо командну кнопку із написом ok.
from tkinter import*
root = Tk()
root.geometry('200x100')
btn = Button(root, text = 'ok', width = 10, height = 2, font = 'Arial 16')
btn.pack()
root.mainloop()
Щоб додати на кнопку малюнок з графічного файла, потрібно зберегти у змінній місцерозташування файла за допомогою функції PhotoImage(file = 'ім'я файла') і присвоїти атрибуту image значення цієї змінної.
Засобами tkinter можна завантажувати зображення форматів .gif, .png.
Приклад:
Створимо командну кнопку і додамо на кнопку малюнок із файла Picture.gif, який міститься в тій самій папці, що і файл програми.
from tkinter import*
root = Tk()
my_image = PhotoImage(file = 'Picture.gif')
btn = Button(root, image = my_image)
btn.pack()
root.mainloop()
Створення обробників подій для об’єктів класу Button
Командна кнопка застосовується для запуску чи закінчення певного процесу.
Щоб прикріпити до віджета обробник події Натискання на кнопку, необхідно під час створення цього об’єкта в переліку параметрів параметру command присвоїти посилання на функцію, яка виконуватиметься в разі натискання.
Приклад: Створимо кнопку із заголовком Натисни мене!, яка виводить повідомлення Клік! У цьому коді функція 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()
Наприклад, віджет — напис 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)
Приклад: В обробнику події move_lab() з об’єкта event за допомогою атрибута widget здійснюється доступ до об’єкта, для якого обробляється подія.
Методи winfo_x() і winfo_y() цього об’єкта повертають його координати x і y відносно вікна.
lab.focus_set()
lab.bind('<KeyPress-Right>', move_lab)
root.mainloop()
Зверни увагу!
Обробник події має бути описаний вище, ніж виклик обробника події. Найчастіше опис функції-обробника події записують на початку тексту програми.