Конструктор уроків
1
Багато програм на сьогоднішній день використовують графічний інтерфейс, який більш інтуїтивний та зручний для користувача, ніж консоль. І за допомогою мови програмування Python можна також створювати графічні програми. Для цього Python за замовчуванням застосовується спеціальний тулкіт - набір компонентів, який називається tkinter . Тулкіт tkinter доступний у вигляді окремого вбудованого модуля, який містить усі необхідні графічні компоненти - кнопки, текстові поля і т.д.
По суті Tkinter представляє інтерфейс Python для графічної бібліотеки Tk (Власне сама назва "Tkinter" є скороченням "Tk interface"). Спочатку дана бібліотека розроблялася для мови Tcl – її створив у 1988 році Джон Остерхаут (John Ousterhout), професор computer science з Берклі для створення графічних програм для своєї мови Tcl. Але згодом Tk була адаптована для широкого ряду динамічних мов, зокрема Ruby, Perl і природно для мови Python (1994 року). І на сьогоднішній день і бібліотека Tk, і сам тулкіт tkinter доступні для більшості операційних систем, у тому числі для Mac OS, Linux та Windows.
Переваги Tkinter:
За замовчуванням цей тулкіт включений до стандартної бібліотеки мови Python у вигляді окремого модуля, тому не потрібно щось додатково встановлювати.
Tkinter - кросплатформний, один і той же код працюватиме однаково на різних платформах (Mac OS, Linux та Windows)
Tkinter легко вивчити. Сам інструментарій, хоча й містить готовий код, віджети та графічні елементи, все ж досить лаконічний та простий.
Tk поширюється за BSD-ліцензією, тому бібліотека може бути використана як в опенсорсних проектах, так і в комерційних напрацюваннях.
Якщо необхідно або цікаво дізнатися версію бібліотеки Tk, яка використовуватиметься, в інтерпертаторі Python можна виконати таку інструкцію:

Створимо першу програму із використанням Tkinter. Для цього визначимо наступний скрипт:

Для створення графічного вікна застосовується конструктор Tk() , визначений у модулі tkinter. Створюване вікно надається змінної root, і через цю змінну ми можемо керувати атрибутами вікна. Зокрема, за допомогою методу title() можна встановити заголовок вікна.
За допомогою методу geometry() – розмір вікна. Для встановлення розміру метод geometry() передається рядок у форматі "Ширина x Висота". Якщо при створенні вікна програми метод geometry()не викликається, вікно займає той простір, який необхідний для розміщення внутрішнього вмісту.
Після створення вікна ми можемо розмістити в ньому інші графічні елементи. Ці елементи також називаються віджетами. У цьому випадку ми розміщуємо текстову мітку у вікні. Для цього ми створюємо об'єкт класу Label , який зберігає певний текст. Потім, щоб розмістити елемент мітки у вікні, ми викликаємо його метод.pack()
Для відображення вікна треба викликати в нього метод mainloop() , який запускає цикл обробки подій вікна взаємодії з користувачем.
В результаті при запуску скрипту ми побачимо таке порожнє віконце:

Основним компонентом графічних програм є вікно. Потім у вікно додаються решта компонентів графічного інтерфейсу. У Tkinter вікно представлене класом Tk . Наприклад, створення вікна:

Клас Tk має низку методів та атрибутів, які дозволяють встановити різні аспекти вікна. Деякі їх.
За замовчуванням вікно має деякі стандартні розміри. Для встановлення розмірів використовується метод geometry() . Наприклад, визначення вікна з шириною 300 одиниць і висотою 250 одиниць:

За замовчуванням вікно позиціонується у верхній лівий кут екрана з невеликим зміщенням. Але ми можемо змінити його положення, передавши потрібні значення метод geometry():

Тепер рядок у методі geometry має такий формат: "Ширина x Висота + координата X + координата Y". Тобто при запуску вікно шириною 300 одиниць і висотою 250 одиниць перебуватиме на 400 пікселів праворуч і 200 пікселів вниз від верхнього лівого кута екрана.
Для отримання даних про розмір та позицію також можна використовувати метод geometry() , який повертає дані значення у вигляді рядка у форматі "widthxheight+x+y":

Щоб додаток ще до методу mainloop()застосував для вікна передані йому значення по ширині, висоті та позиції, викликається метод root.update_idletasks(). У результаті виклик root.geometry()повернути рядок "300x250+400+200"
За умовчанням ми можемо змінювати розмір вікна. Проте іноді може знадобитися зробити розмір вікна фіксованим. І тут ми можемо використовувати метод resizable() . Його перший параметр вказує, чи користувач може розтягувати вікно по ширині, а другий параметр - чи можна розтягувати по висоті. Щоб заборонити розтягування на будь-якій стороні, необхідно для відповідного параметра передати значення False. Наприклад, заборонимо будь-яку зміну розмірів:

Також можна встановити мінімальні та максимальні розміри вікна:

За промовчанням заголовок вікна - "tk". Для встановлення заголовка застосовується метод title() , який передається текст заголовка:

Перед заголовком відображається значок. За промовчанням це іконка пера. За допомогою методу iconbitmap() можна встановити будь-яку іншу іконку. Наприклад, визначимо в одній папці з файлом програми якийсь файл з іконкою, допустип, він називається "favicon.ico" і використовуємо його для встановлення іконки:

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

Ключовим будівельним блоком у графічному додатку є різні елементи управління, з якими взаємодіє користувач, як кнопки, мітки, поля введення. Tkinter має багату палітру різних елементів управління, які називаються віджетами . Основні з них:
Button : кнопка
Label : текстова мітка
Entry : однорядкове текстове поле
Text : багаторядкове текстове поле
Checkbutton : прапорець
Radiobutton : перемикач або радіокнопка
Frame : кадр, який організовує віджети в групи
Listbox : список
Combobox : список, що випадає
Menu : елемент меню
Scrollbar : смуга прокручування
Treeview : дозволяє створювати деревоподібні та табличні елементи
Scale : текстова мітка
Spinbox : список значень зі стрілками для переміщення елементами
Progressbar : текстова мітка
Canvas : текстова мітка
Notebook : панель вкладок
Tkinter надає віджети у двох варіантах: віджети, які знаходяться безпосередньо в пакеті tkinter , і віджети з пакету tkinter.ttk . З одного боку, обидва пакети надають практично ті самі віджети, наприклад, віджет Button є в обох пакетах. Але з іншого боку, ttk надає трохи більше функціональності налаштування віджетів, зокрема, їх стилізації. І вважається, що віджети з ttk дещо сучасніші, ніж стандартні, в той же час з ttk, можливо, трохи складніше працювати. Що використовувати залишається на вибір розробника.
Розглянемо різницю на прикладі віджету Button. Спочатку подивимося на стандартний віджет Button із загального пакету tkinter :

Тепер подивимося на прикладі кнопки з пакету ttk :

Віджет має набір параметрів, які дозволяють налаштувати його зовнішній вигляд і поведінку. Кожен віджет має свій набір параметрів. Зазвичай параметри задаються через конструктор. Наприклад, у прикладі вище кнопки встановлювався параметр text, який задає текст на кнопці:

Одним із найбільш використовуваних компонентів у графічних програмах є кнопка. У tkinter кнопки представлені класом Button . Основні параметри віджету Button:
command : функція, що викликається при натисканні на кнопку
compund : встановлює розташування картинки та тексту щодо один одного
cursor : курсор покажчика миші при наведенні на мітку
image : посилання на зображення, що відображається на мітці
pading : відступи від кордонів вилжета до тексту
state : стан кнопки
text : встановлює текст мітки
textvariable : встановлює прив'язку до елемента StringVar
width : ширина віджету
Додамо у вікно звичайну кнопку з пакету ttk:

Для створення кнопки використовується конструктор Button() . У цьому архітекторі за допомогою параметра text можна встановити текст кнопки.
Конструктор Button визначає різні параметри, які дозволяють налаштувати поведінку та зовнішній вигляд кнопки. Однак конкретний набір параметрів залежить від того, чи ми використовуємо кнопки з пакету tkinter або з пакету tkinter.ttk.
Для обробки натискання на кнопку необхідно встановити в конструкторі параметр command , надавши йому посилання на функцію, яка спрацьовуватиме при натисканні:

Тут як обробник натискання встановлюється функція click_button. У цій функції змінюється глобальна змінна clicks, яка зберігає кількість кліків. Крім того, змінюємо текст кнопки, щоб візуально було видно скільки натискань зроблено. Таким чином, при кожному натисканні кнопки спрацьовуватиме функція click_button, і кількість кліків збільшуватиметься.
Для ttk-кнопки ми можемо встановити відключений стан за допомогою методу state() , передавши значення "disabled". З такою кнопкою користувач не зможе взаємодіяти:

2
Завдання 1 — Перше графічне вікно
Створіть програму, яка:
відкриває графічне вікно;
встановлює заголовок;
задає розмір вікна;
забороняє зміну розміру;
виводить текстову мітку.

Рефлексія від 1 учня
Сподобався:
Так: 1
Ні: 0
Зрозумілий:
Так: 1
Ні: 0
Потрібні роз'яснення:
Ні: 1
Так: 0
Створення й уведення структури таблиць. Поняття таблиці, поля, запису. Створення таблиць, означення полів і ключів у середовищі СКБД. Властивості полів, типи даних.