Для взаємодії з прикладною програмою користувачеві можна не лише надати можливість уводити інформацію з клавіатури, а й обирати певні варіанти із запропонованих, використовуючи перемикачі або прапорці.
Перемикачі
Почнемо із перемикачів, їх ще називають радіоточками. Так, як перемикачі слугують для вибору одного варіанта серед запропонованих, то вони представляються групою, в якій активним може бути тільки один перемикач. Якщо перемикач обрано, то всередині нього з'являється позначка.
Перемикачі використовують, коли користувач має обрати лише один варіант із набору запропонованих.
Так, ці елементи керування доцільно використовувати для створення тестів, опитувань тощо.
Але їх створити трішки складніше, ніж будь-який об’єкт, який ми створювали раніше. Просто перемикач — це не єдиний об’єкт, а група об’єктів, тому спочатку створюється група перемикачів, а потім самі перемикачі за допомогою функції Radiobutton():
Приклад:
rb=Radiobutton(text="Перший перемикач")
rb.place(x=100,y=100)
Властивості об’єкта «перемикач»
Об’єкт Radiobutton створюється викликом класу Radiobutton модуля tkinter.
Об’єкт радіокнопка має властивості (можна використовувати не всі):
• w —назва вікна розташування;
• text — текст напису;
• variable — вказує на змінну (IntVar або StringVar), яку треба пов'язати з радіокнопкою. Значення цієї змінної буде змінюватися відповідно до вибраної опції;
• value — вказує значення, яке буде присвоєно змінній, коли обрана ця радіокнопка;
• bg — колір фону (скорочено від background),
• fg — колір напису (скорочено від foreground);
• font — шрифт і його розмір.
• command — вказує функцію, яка буде викликана, коли радіокнопка буде натискана.
! Аргументи variable, value та text є обов’язковими, без них перемикачі не будуть представляти із себе нічого. Кожен перемикач потрібно розмістити за допомогою методу place().
ім'я_групи перемикачів=IntVar()
назва_ перемикача1= Radiobutton(назва_вікна, text=”Текст перемикача1”, variable= ім'я_групи_перемикачів, value=значення перемикача1)
назва_перемикача1= Radiobutton(назва_вікна, text=”Текст перемикача2”, variable= ім'я_групи_перемикачів, value=значення перемикача2)
…
ім'я групи перемикачів – це цілочисельна (lntVar) змінна із результатом вибору користувача програми.
IntVar - це клас в бібліотеці Tkinter у Python, який використовується для створення цілочисельних змінних, які можна пов'язати з віджетами, такими як перемикачі Checkbutton або Radiobutton.
Основне використання IntVar полягає в тому, щоб визначити цілочисельну змінну, яка може служити маяком для відслідковування та оновлення стану віджетів у реальному часі.
value — значення перемикача, яке буде набувати група перемикачів в залежності від вибору користувача. Зазвичай значення перемикача – це натуральні числа, починаючи від 1, хоча ви можете встановити і інші. Та головне щоб для всіх перемикачів вони були різними.
! Якщо потрібно отримати дані про те, який перемикач увімкнутий, використовують метод get(), щоб надати значення — метод set().
Приклад:
Для прикладу створимо вікно із розмірами 400x400, та створимо в нього групу перемикачів, а саме три перемикачі із варіантами кольорів (жовтий, рожевий та світло зелений). І перший розмістимо в 100 пікселях від лівого краю та в 200 пікселях від верхнього краю, а кожен наступний на 20 пікселів нижче. Програмний код буде виглядати так:
from tkinter import *
# створення функції зміни кольору вікна
def ch_color():
if perem.get()==1:
Window.configure(bg="yellow")
elif perem.get()==2:
Window.configure(bg="pink")
elif perem.get()==3:
Window.configure(bg="lightgreen")
# створення вікна
Window=Tk()
Window.geometry("400x400")
# створення групи перемикачів perem
perem=IntVar()
# створення та розміщення першого перемикача perem1
perem1=Radiobutton(Window, text="Жовтий", variable=perem, value=1, command=ch_color)
perem1.place(x=100, y=200)
# створення та розміщення першого перемикача perem2
perem2=Radiobutton(Window, text="Рожевий", variable=perem, value=2, command=ch_color)
perem2.place(x=100, y=220)
# створення та розміщення першого перемикача perem3
perem3=Radiobutton(Window, text="Світло зелений", variable=perem, value=3, command=ch_color)
perem3.place(x=100, y=240)
Window.mainloop()
ЗАВДАННЯ ДЛЯ САМОСТІЙНОЇ РОБОТИ №1 - виконати зміну коду:
Змінити текст перемикачів.
Змінити значення перемикачів.
Додати більше перемикачів.
Змінити розмір і розташування перемикачів.
Змінити колір напису і колір фону перемикачів.
ДОМАШНЯ РОБОТА:
1. Підручник стор. 170-172.
2. Виконати завдання для самостійної роботи №1 і надіслати на пошту вчителя email: voronenko@54.edu.ks.ua
Прапорці
Що стосується прапорців, то ці елементи управління не об’єднуються в трупи, тому, що активних прапорців може бути не обмежена кількість. Виглядають вони у неактивному стані i в активному стані по різному:
Прапорці слугують для вибору декількох варіантів і тому кожен прапорець має свою змінну із значенням.
Для створення прапорців призначена функція Checkbutton(), і застосовується вона так:
назва_змінної=IntVar()
ім’я_прапорця= Checkbutton(назва_вікна, text=“Teкст прапорця", vаriable=назва_змінної, onvalue=значення_коли_прапорець_ввікнутий, ofvalue=значення_коли_прапорець_вимкнутий)
Зазвичай в якості значення прапорця встановлюють 1 та 0 (в активному та неактивному стані), але вибір все одно залишається за автором програми.
Для прикладу візьмемо вікно з розмірами 500х500 пікселів та створимо напис із початковим текстом "Не вибрано". Також створимо чотири прапорці (перші два із варіантами кольорів та інші двоє із варіантами типів фарб). В залежності від нашого вибору текст напису буде змінюватися (у якості прикладу розглянемо лише 2 комбінації). Щоб реалізувати зміну тексту напису створимо подію Button-l для напису.
from tkinter import *
def newtext(event):
if prap1.get()==1 and prap4.get()==1:
label["text"]="Ви вибрали жовту гуаш"
elif prap2.get()==1 and prap3.get()==1:
label["text"]="Ви вибрали зелену акварель"
window=Tk()
window.geometry("400x400")
label=Label(window, text="Не вибрано")
label.place(x=100, y=50)
prap1=IntVar()
prap2=IntVar()
prap3=IntVar()
prap4=IntVar()
prapor1=Checkbutton(window, text="Жовтий", variable=prap1, onvalue=1, offvalue=0)
prapor1.place(x=100, y=100)
prapor2=Checkbutton(window, text="Зелений", variable=prap2, onvalue=1, offvalue=0)
prapor2.place(x=100, y=120)
prapor3=Checkbutton(window, text="Акварель", variable=prap3, onvalue=1, offvalue=0)
prapor3.place(x=100, y=160)
prapor4=Checkbutton(window, text="Гуаш", variable=prap4, onvalue=1, offvalue=0)
prapor4.place(x=100, y=180)
label.bind("<Button-1>",newtext)
window.mainloop()
Детальний аналіз рядка label.bind("<Button-1>", newtext)
Цей рядок коду відповідає за прив'язку функції newtext до події кліку лівою кнопкою миші на елементі label. Давайте розберемо його покроково:
label: Це змінна, яка зберігає посилання на елемент Label у вікні Tkinter.
.bind(): Цей метод об'єкта label дозволяє прив'язувати функції до різних подій, які можуть відбуватися з цим елементом.
"<Button-1>": Це рядок, що визначає тип події. В даному випадку, <Button-1> означає лівий клік мишею. Tkinter підтримує різні типи подій, такі як "<Button-3>" (клік правою кнопкою миші), "<Key>" (натискання клавіші), тощо.
, newtext: Це назва функції, яку потрібно викликати, коли відбувається подія. У цьому випадку, при лівому кліку мишею на елементі label буде викликана функція newtext.
Загалом, цей рядок коду забезпечує інтерактивність програми. Користувач може взаємодіяти з вікном, натискаючи ліву кнопку миші на елементі label, що призводить до виконання функції newtext. Функція newtext перевіряє стан прапорців та оновлює текст елемента label відповідно до вибору користувача.
ЗАВДАННЯ ДЛЯ САМОСТІЙНОЇ РОБОТИ №2 - виконати зміну коду:
Змінити умови вибірки і відображення результату.
Змінити значення прапорців.
Додати більше прапорців.
Змінити розмір і розташування.
Змінити колір напису і колір фону при виборці певного параметру із списку значень прапорців.
ДОМАШНЯ РОБОТА:
1. Підручник стор. 168-175.
2. Виконати завдання для самостійної роботи №2 і надіслати на пошту вчителя email: voronenko@54.edu.ks.ua