Поняття форми, елемента керування, події, обробника події.

Для повторення, виконайте наступне завдання:

Ми вже навчилися створювати статичні вікна та налаштовувати їх властивості. Але програми не будуються лише на статиці, їм властива і динаміка, тобто певні зміни. Кожна програма, яка має графічний інтерфейс, складається з окремих елементів керування, які ми назвали віджетами. Над кожним віджетом, як і над самою формою, ми можемо виконувати певні дії, і до факту виконання цих дій (настання певної події) прив’язувати частину програми, яка буде при цьому виконуватись. 

Подія:

Подіязміна властивостей об’єкта, взаємодія між об’єктами, створення нового або знищення існуючого об’єкта. 

Кожна подія в якості своїх властивостей отримує оцінку часу, коли вона відбулася, а також місця, де вона відбулася (над яким елементом)

Типи подій:

Button-1 – натиснення лівої кнопки миші

Button-2 – натиснення середньої кнопки миші

Button-3 – натиснення правої кнопки миші

KeyPress – натиснення клавіші на клавіатурі над віджетом

KeyRelease – відпускання клавіші клавіатури над віджетом

ButtonPress – натиснення кнопки миші над віджетом

ButtonRelease – відпускання кнопки миші над віджетом

Motion – рух миші над віджетом

Configure – зміна розмірів або розташування вікна

Map – показ вікна (розгортання)

Unmap – приховування івікна (згортання)

Destroy – закриття вікна

FocusIn – отримання фокусу віджетом

FocusOut – втрата фокусу віджетом

Enter – курсор миші входить в область вікна

Leave – курсор миші залишає область вікна.

Окрім того, події можна об’єднувати, наприклад:

Double-Button-1 – подвійне натиснення лівої кнопки миші;

Triple-Button-3 – потрійне натиснення правої кнопки миші;

Alt-Motion – рух миші з натисненою клавішею <Alt>;

Control-KeyPress-c – натиснення комбінації клавіш <Ctrl+c> (хоча в даному прикладі подію KeyPress можна не вказувати);

Control-Shift-Keypress-a – натиснення комбінації клавіш <Ctrl+Shift+a> (і в цьому теж подію KeyPress можна не вказувати);.

Сама по собі подія нічого не буде робити, вона просто скаже програмі, що дещо відбулось. Для опрацювання події створюється спеціальна частина програми, яка виконується при настанні цієї події. Ця частина програми називається обробником події.

Обробник подіїфрагмент програми, який виконується після настання події з якою він пов’язаний.

У Python обробником події є функція.

Функціявідокремлена частина програми, яка має власне ім’я і за цим іменем може бути викликана на виконання. 

Функція має наступну структуру:

 

Функції задаються на початку програми, після імпорту модулів.

Але створити функцію – замало, потрібно ще пов’язати функцію з подією та віджетом. Для цього використовують різні способи. 

Для більшості віджетів, що реагують на дію користувача, активацію віджета (наприклад натискання кнопки) можна прив'язати з використанням опції command. До таких віджетів відносяться: Button, Checkbutton, Radiobutton, Spinbox, Scrollbar, Scale. Під час вивчення наступних тем, ми обов’язково розглянемо дану конструкцію. 

Крім опції command, широко застосовується метод bind.

Метод bind прив'язує обробник події до заданої події (натискання кнопки миші, натискання клавіші на клавіатурі і т.д.). bind приймає три аргументи:

  • назва події
  • функцію, яка буде викликана при настанні події
  • третій аргумент (необов'язковий) - рядок "+" - означає, що ця прив'язка додається до вже існуючих. Якщо третій аргумент опущений або дорівнює порожній рядку - прив'язка заміщає всі інші прив'язки даної події до віджету.

Метод bind має наступний синтаксис:

 

Функція, яка викликається при настанні події, повинна приймати один аргумент. Це об'єкт класу Event, в якому описані властивості події, що відбулася. 

Метод bind описується в кінці програми, перед методом mainloop().

Практична частина:

Створити програму, яка згенерує вікно розміром 300 на 200 пікселів, синього кольору із заголовком «Початковий вигляд». Передбачити дві події: 1 – натиснення лівої кнопки миші (розмір вікна 400 на 300 пікселів, колір – жовтий, заголовок – «Вигляд змінено»), 2 – натиснення правої кнопки миші (вікно повертається до початкового вигляду).

Хід роботи:

А) Імпортуємо модуль tkinter, створюємо вікно із заданими характеристиками:

 

Зберігаємо, запускаємо, переглядаємо із задоволенням результат роботи:

 

Б) Пишемо обробник події для лівої кнопки (відразу після імпорту модуля tkinter):

 

В) Пишемо обробник події для правої кнопки (після функції left_click):

 

Г) Тепер залишилось пов’язати події та обробники подій. Для цього використаємо метод bind (в кінці програми, перед методом mainloop()):

 

Д) Запускаємо програму і насолоджуємось результатом:

 

 

Завдання

1. Опрацювати матеріал уроку (обов'язково виконуючи всі наведені приклади);

2. Законспектувати основні моменти;

3. Написати програму, яка створить вікно з наступними властивостями:

  • Заголовок «Палітра кольорів»
  • Розмір 300 на 300 пікселів
  • Колір – light blue

4. У створеній програмі описати події для натиснення наступних кнопок:

  • <c> - колір ‘cyan’ та відповідний заголовок вікна;
  • <v> - колір ‘violet’ та відповідний заголовок вікна
  • <b> - колір ‘black’ та відповідний заголовок вікна
  • <m> - колір ‘magenta’ та відповідний заголовок вікна
  • <g> - колір ‘gold’ та відповідний заголовок вікна
  • <s> - колір ‘silver’ та відповідний заголовок вікна
  • <l> - колір ‘lime’ та відповідний заголовок вікна
  • <w> - колір ‘white’ та відповідний заголовок вікна
  • <r> - колір ‘red’ та відповідний заголовок вікна
  • <p> - колір ‘pink’ та відповідний заголовок вікна

5. Окрім цього передбачити подію натиснення правої кнопки миші для повернення в початковий стан.

6. Написану програму відіслати на перевірку використовуючи E-mail.

Підказка:

Обробник події для натиснення кнопки <c>:

 

Прив’язка обробника події до події натиснення клавіші <c>:

 

Приклад роботи програми: