План вивчення теми:
Програмний об'єкт КНОПКА та його характеристики
Д/з: опрацювати:
§6.3
веб-сторінку уроку 21
Одним з компонентів (елементів керування), який можна використати в проєктах, є кнопка - Button.
Розміщення кнопки у вікні проекту:
Створити новий об’єкт типу Button, пов’язати його зі змінною, яка визначатиме ім’я об’єкта.
Установити значення властивостей кнопки або залишити їх за замовчуванням.
Розмістити створений об’єкт у вікні.
Для створення кнопки та пов’язування її зі змінною використовують команду вигляду:
<ім’я_кнопки> = Button() - команда створення кнопки зі значеннями властивостей висота, ширина і колір, які установлено за замовчуванням, без напису на ній.
або <ім’я_кнопки> = Button(<набір властивостей та їх значень>) - команда створення кнопки, значення властивостей якої задано в цій команді. У дужках через кому вказують пари <властивість> = <значення>.
Властивості кнопки:
text=”текст” – текст кнопки;
fg=”колір” – колір тексту кнопки;
font=”шрифт та розмір шрифту” – висота шрифту тексту кнопки;
bg=”колір” – колір кнопки (значенням може бути назва кольору англійською);
width=число – ширина кнопки (кількість символів, які можуть бути розміщені поруч по горизонталі);
height=число – висота кнопки (кількість символів, які можуть бути розміщені один під одним по вертикалі);
padx=число - відступ від границі до вмісту по горизонталі;
pady=число - відступ від границі до вмісту по вертикалі;
state - стан кнопки (normal - нормальний, disable - недоступний).
Ми вже навчитися створювати статичні вікна та налаштовувати їх властивості. Але програми не будуються лише на статиці, їм властива і динаміка, тобто певні зміни. Тож розглянемо таке поняття як події.
Одним із популярних підходів до вирішення проблеми програмування є створення об’єктів та подій для них. Такий підхід має назву об'єктно-орієнтоване та подійно-орієнтоване програмування. Ця концепція у Python зосереджена на створенні та багаторазовому використанні фрагменту коду - підпрограми, для однотипних об'єктів. Ця концепція також відома як DRY (не повторюйся). Об’єктно- та подійно-орієнтоване програмування робить програму легкою для розуміння, компактною, а також ефективною.
Програмний об’єкт має дві характеристики:
атрибути (слова синоніми - властивості, ознаки, параметри)
поведінку (дії, які він може виконувати, у результаті настання деякої події, яку виконали над ним - Наприклад, кнопку натиснули(це подія) і вона змінила свій колір - проявила запрограмовану для неї поведінку)
Під час виконання проєкту з об'єктами можуть відбуватися події:
зміна властивостей об’єкта,
взаємодія між об'єктами,
утворення нового,
знищення існуючого.
Подія — це одна чи деяка послідовність дій, які відбуваються у наслідок реагування на іншу дію.
Обробник подій — це функція у вашій програмі, яка викликається, коли відбувається подія - метод.
Підпрограма - це окремо виділена частина проекту, яка має своє ім’я та яку можна за цим іменем запустити на виконання. У Python розрізняють підпрограми двох видів: процедури і функції.
Процедура - це підпрограма, результатом виконання якої є створення компонента (вікна, кнопки та ін.) або змінення значень властивостей існуючого, виведення певного тексту, створення зображення тощо. Зазвичай обробники подій є процедурами.
Функція - це підпрограма, результатом виконання якої є одне або кілька значень: числа, рядки тексту та ін.
Метод - це процедура або функція, що пов’язана з певним об’єктом - обробник події
Подія — це те , що відбувається з вашою програмою (наприклад, користувач натискає клавішу або клацає або перетягує мишу), на що програма має відреагувати.
Віджети зазвичай мають багато вбудованих функцій поведінки. Наприклад, кнопка реагує на клацання миші викликом commandзворотного виклику. Для іншого прикладу, якщо ви переміщуєте активізуєте віджет "поле введення" та на клавіатурі натискаєте клавішу з деякою літерою, то ця літера додається до вмісту віджета.
Однак можливість зв’язування подій Tkinter дозволяє додавати, змінювати або видаляти поведінку.
Процес реагування віджетів на певні події називається зв’язуванням, коли програма встановлює обробник подій, який викликається, коли подія відбувається з віджетом.
З будь-якою подією, яка може відбутися з об'єктом, можна пов’язати фрагмент програми, який буде виконуватися одразу після настання цієї події. Такий фрагмент програми називають обробником події. Обробник події, пов’язаний з певним об’єктом, називають методом цього об’єкта.
Дії, які можуть виконувати об'єкти або які можна виконувати над ними називають функціями або методами. Їх створюють за допомогою інструкції def всередині тіла коду цілого класу однотипних об'єктів та належать цьому класу.
Методи — це функції, які використовуються для визначення поведінки об’єкта.
Над об'єктами можна виконувати певні дії, і ці дії здебільшого залежать якого характеру дані містяться в об'єкті, або ж, як ми вже з'ясували, до якого типу відноситься об'єкт. Над числами ми можемо виконувати одні дії, над символьними рядками інші, над кнопками вікна— ще інші.
Дії над об'єктами зручно виконувати за допомогою функцій передаючи їм об'єкти як аргумент. Але оскільки над об'єктами різних типів виконуються різні дії, то може виникнути ідея: як би зробити так, щоб у об'єктів певного типу були тільки свої функції?
Якщо ідея непогана, то треба її реалізовувати! І в Python ми зустрічаємо таке нове поняття, як "методи".
Метод — це по суті функція, яка "закріплена" за певним об'єктом і яка виконує певні дії над цим об'єктом.
Записується це наступним чином: об'єкт, далі ставиться крапка, і після крапки метод об'єкта:
object.method()
У наведеному вище прикладі "object" — це об'єкт, а "method" — його метод. Пам'ятаючи що метод — це функція, його можна викликати в середині тіла основної програми. Важливо щоб програмний код метод був описаний до команди виклику цього методу.
Позначення в мові Python деяких подій, які можуть відбутися з об'єктом:
Подія (позначення в мові Python) Орієнтовне Ім'я_обробника події Опис роботи
<Button-1> або <1> Click - клацання лівої кнопки миші
<Double-Button-1> або <Double-1> DbICIick - подвійне клацання лівої кнопки миші
<Motion> (англ. motion - рух) MouseMove - рух вказівника по вікну
<KeyPress> KeyPress - натискання будь-якої клавіші на клавіатурі
<Expose> (англ. expose - розкривати) Create - створення вікна
<FocusOut> (англ. focus out - вихід фокуса) Close - закривання вікна
<Button-3> – клік правою клавішею миші по будь-якій області об’єкта;
<Destroy> – закриття вибраного вікна.
Методи, що використовуються для об’єкта кнопка:
pack() - розташування кнопки нижче попередньо створеного об'єкта, під рядком заголовка вікна з однаковими відступами від лівої та правої меж вікна.
Якщо у вікні розміщується декілька кнопок, то вони будуть відображатися одна під одною без відступів між ними. Якщо потрібно розмістити кнопку з деяким відступом від рядка заголовка або попередньої кнопки, то в дужках можна указати цей відступ у пікселях як значення властивості pady. Наприклад, button.pack(pady=20) - кнопку буде розміщено з відступом 20 пікселів від верхньої межі або попередньої кнопки.
place(x=<відступ від лівої межі вікна>,y=<відступ від верхньої межі вікна>) - вказує точне місцезнаходження кнопки, верхня ліва вершина кнопки розміщується в точці вікна із заданими координатами х та у.
Наприклад, button.place(x=200,y=100) - верхня ліва вершина кнопки буде розміщена у точці з координатами (200, 100).
pack_forgat() або place_forgat() дозволить зробити кнопку невидимою.
pack() або place() зробить кнопку знову видимою.
Пов'язати з кнопкою обробник будь-якої події можна так само, як з вікном, використовуючи метод bind().
Щоб прикріпити до віджета обробник події "Натискання на кнопку", необхідно під час створення цього об’єкта в переліку атрибутів указати параметр command і присвоїти йому посилання на метод, який буде виконуватися в разі натискання:
Приклад 1 застосування властивості кнопки на прикладі (всі властивості зручніше записати в дужки через кому).
button=Button(text=“Змінити", width=15) # Команда створення кнопки з іменем buttton з текстом "Змінити" завширшки 15 символів
but=Button(Window, width=4, height=2, bg="green”, text=“0k", fg=“red“, font="Times 12”)
# Створення кнопки з іменем but та встановлення для неї таких властивостей:
колір фону зелений,
текст "ОК" червоного кольору,
шрифт Times New Roman 12,
розміри кнопки: 4 знаки - ширина і 2 знаки – висота. Розміри кнопки залежать
від кількості символів тексту в кнопці та розміру шрифту тексту.
Завдання 1
Створити проєкт із створення кнопки та розміщення її у вікні.
from tkinter import* #імпортує модуль tkinter у проєкт;
root=Tk() #створює вікно з іменем root;
root.geometry('300x200+400+100') #визначає розміри та місце розташування вікна;
button=Button(text='Змінити',width='15') #створює кнопку з іменем button з текстом на ній "Змінити" та шириною 15 символів;
button.pack(pady=20) #розміщує кнопку з відступом 20 пікселів від верхньої межі вікна.
Приклад 2 обробника події Click для кнопки, яка містить команду встановлення жовтого кольору вікна.
Доповніть попередній проект командами виділеними жирним шрифтом
from tkinter import*
def click(event):
root['bg']='yellow'
root=Tk()
root.geometry('600x400+350+200')
button=Button(text='Змінити',width='15')
button.pack(pady=30)
button.bind('<1>', click)
Для кнопки подією за замовчуванням є клацання лівої кнопки миші. Тому пов’язати з кнопкою метод опрацювання саме цієї події можна простіше:
під час створення кнопки вказати ім’я відповідного обробника події як значення атрибуту command;
обробник події з указаним іменем описати перед створенням кнопки;
у заголовку не потрібно вказувати посилання на подію, що відбулася, – event.
Внесіть зміни у верхній код згідно з нижче наведеного зразка:
from tkinter import* #імпортує модуль tkinter у проєкт;
def click():
root['bg']='yellow'
root=Tk() #створює вікно з іменем root;
root.geometry('600x400+350+200') #визначає розміри та місце розташування вікна;
#button=Button(text='Змінити') #створює кнопку з іменем button з текстом на ній "Змінити" button=Button(text='Вибери мене', command=click)
button.pack(pady=30) #розміщує кнопку з відступом 20 пікселів від верхньої межі вікна.
#button.bind('<1>', click)
Приклад 3
На малюнку наведено приклад обробника події Click для кнопки – процедури з іменем click(), яка містить команди: установлення для кнопки червоного кольору фону; установлення шрифту Arial розміром 14 пікселів; виведення на кнопці вказаного тексту; установлення для кнопки стану недоступна.
Завдання 2
Створити проєкт, який містить обробник події Click для кнопки, який містить команди змінення розмірів вікна на 300х300 та встановлення жовтого кольору вікна. Команди для виконання проєкту завдання 2 розташовані на малюнку нижче. Кнопка з іменем but має такі властивості: ширина - 4, висота - 2 символи, текст Оk червоного кольору на зеленому фоні шрифтом Times 12.
Завдання 3