Сьогодні відбувся
Вебінар:
«
Інтеграція знань, практики та інноваційних технологій у професійному розвитку педагогів закладів освіти
»
Взяти участь Всі події
Урок:

Основи Tkinter 5

Опис уроку (учням цей опис не показується):

from tkinter import *

from tkinter import ttk

from tkinter.messagebox import showinfo

# Створення вікна

root = Tk()

root.title("Реєстрація")

root.geometry("300x150")

# Функція для кнопки

def check_agreement():

# Зчитуємо стан (0 або 1) і виводимо його

currentstate = agreevar.get()

showinfo(title="Стан галочки", message=f"Значення змінної: {current_state}")

# Створення змінної для прапорця

agree_var = IntVar()

# Створення прапорця

agreecheck = ttk.Checkbutton(root, text="Я згоден з умовами використання", variable=agreevar)

agree_check.pack(pady=20)

# Створення кнопки

nextbutton = ttk.Button(root, text="Продовжити", command=checkagreement)

next_button.pack()

root.mainloop()

from tkinter import *

from tkinter import ttk

from tkinter.messagebox import showinfo

# Створення вікна

root = Tk()

root.title("Налаштування звуку")

root.geometry("300x120")

# Функція, яка спрацьовує автоматично при кліку на прапорець

def sound_alert():

showinfo(title="Звук", message="Стан звуку змінено!")

# Створення змінної для прапорця

sound_var = IntVar()

# Створення прапорця (додано параметр command)

sound_check = ttk.Checkbutton(

root,

text="Увімкнути звук у грі",

variable=sound_var,

command=sound_alert

)

sound_check.pack(pady=40)

root.mainloop()

Вміст уроку:
1
2
3

Урок не містить жодного завдання. Додайте завдання.

Щоб додати завдання, оберіть категорію завдання на панелі запитань.

1

Checkbutton

Елемент Checkbutton є прапорцем, який може перебувати в двох станах: зазначеному і невідзначеному.

Конструктор Checkbutton приймає ряд параметрів, відзначимо основні з них:

  • command : посилання на функцію, що викликається при натисканні на прапорець

  • cursor : курсор при наведенні на елемент

  • image : графічне зображення, яке відображається на елементі

  • offvalue : значення прапорця в невідзначеному стані, за умовчанням 0

  • onvalue : значення прапорця у зазначеному стані за замовчуванням дорівнює 1

  • padding : відступи від тексту до межі прапорця

  • state : стан елемента може приймати значення NORMAL (за замовчуванням), DISABLED та ACTIVE

  • text : текст елементу

  • textvariable : прив'язаний до тексту об'єкт StringVar

  • underline : індекс підкресленого символу у тексті прапорця

  • variable : Посилання на змінну, як правило, типу IntVar, яка зберігає стан прапорця

  • width : ширина елемента

Створимо найпростіший прапорець:

0901xudt-11b8-940x311.png

Відмінністю Checkbutton є можливість прив'язки до змінної через параметр variable , який представляє значення прапорця. Тут цей параметр прив'язаний до змінної enabled типу IntVar. У зазначеному стані прив'язаний об'єкт IntVar має значення 1, а невідзначеному - 0. У результаті через IntVar ми можемо отримувати значення, вказане користувачем.

0901xuec-5d3d-940x453.png

Обробка зміни прапорця

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

0901xueo-3ccd-940x380.png

Тут за зміни стану прапорця спрацьовує функція checkbutton_changed. У ній в залежності від стану прапорця (а точніше в залежності від значення змінної enabled) за допомогою вбудованої функції showinfo()відображаємо повідомлення про стан прапорця:

0901xuez-9dec-738x656.png

onvalue та offvalue

Параметри onvalue та offvalue дозволяють задати значення прапорця у зазначеному та невідзначеному стані. За умовчанням вони дорівнюють 1 і 0 відповідно. Однак ми можемо передати їм інші, більш зручні для нас значення.

0901xug0-141e-940x332.png

Текст прапорця

Для встановлення тексту прапорця можна використовувати параметри textта textvariable. Причому ми можемо прив'язати текст прапорця до його значення за допомогою textvariable:

0901xugn-d43b-940x291.png

В даному випадку для зберігання тексту у зазначеному та невідзначеному станах визначено дві змінні: enabledon та enabledoff. Змінна enabled ініціалізується тим самим значенням (enabled_on), що й параметр onvalue, тому за замовчуванням прапорець буде позначено. А оскільки його параметри textvariable і variable прив'язані до однієї і тієї ж змінної enabled, то вони змінюватимуться синхронно

0901xuhc-0f37-940x443.png

Обробка кількох прапорців

Аналогічно можна використовувати набори прапорців:

0901xuhp-905f-940x615.png

0901xuhx-0fcc-940x383.png

Radiobutton

Віджет Radiobutton представляє перемикач, який може перебувати у двох станах: зазначеному чи невідзначеному. Але на відміну від Checkbutton перемикачі можуть створювати групу, з якої миттєво ми можемо вибрати тільки один перемикач.

Серед параметрів конструктора Radiobutton варто виділити такі:

  • command : посилання на функцію, що викликається при натисканні на перемикач

  • cursor : курсор при наведенні на віджет

  • image : графічне зображення, що відображається віджетом

  • padding : відступи від вмісту до межі перемикача

  • state : стан віджету, може приймати значення NORMAL (за замовчуванням), DISABLED та ACTIVE

  • text : текст віджету

  • textvariable : встановлює прив'язку до змінної StringVar, яка задає текст перемикача

  • underline : індекс підкресленого символу у тексті віджету

  • variable : посилання змінну, зазвичай, типу IntVar, що зберігає стан перемикача

  • value : значення перемикача

  • width : ширина віджету

Визначимо групу перемикачів:

0901z2dh-5ff9-940x528.png

Тут визначено три перемикачі. Всі вони прив'язані до однієї змінної lang, яка представляє тип StringVar. При цьому вони мають різні значення, що встановлюються за параметром value . Початкове значення змінної lang ("java") відповідає значенню value останнього перемикача, тому за замовчуванням буде обраний останній перемикач.

Для виведення виділеного значення над перемикачами визначено текстову мітку, яка відображає значення змінної lang:

0901z2dp-6e6a-628x580.png

У прикладі вище відображуваний текст (параметр text) і значення (параметр value) збігаються, але це необов'язково

Обробка вибору користувача

Параметр command дозволяє встановити функцію, яка обробляє вибір перемикача. Наприклад:

0901z2dr-f5cc-940x422.png

Тут для спрощення дані перемикачів визначено у вигляді списку languages. У циклі for пробігаємось по всіх елементах списку та створюємо перемикач. При натисканні на кожен перемикач спрацьовуватиме функція select(), яка встановить для мітки header відповідний текст:

0901z2dt-6221-640x584.png

Встановлення зображення

Для встановлення зображення застосовується параметр image :

0901z2dz-e97e-940x613.png

Параметру image передається об'єкт PhotoImage, у конструкторі якого через параметр fileвстановлюється шлях зображення. Тут передбачається, що в одній папці з файлом програми знаходяться файли зображень "python_sm.png", "csharp_sm.png" та "java_sm.png".

0901z2e4-922e-628x770.png

Якщо потрібно також відображати і текст, то для цього можна встановити параметр compound , який визначає положення тексту по відношенню до зображення за допомогою одного з наступних значень:

  • top : зображення поверх тексту

  • bottom : зображення під текстом

  • left : зображення зліва від тексту

  • right : зображення праворуч від тексту

  • none : за наявності зображення відображається лише зображення

  • text : відображається лише текст

  • image : відображається лише зображення

Наприклад, відобразимо картинку поверх тексту:

0901z2e8-7586-940x500.png

0901z2eb-56f5-638x858.png

Встановлення батьківського контейнера. Frame

Кожен віджет, крім вікна, розміщується у певному батьківському контейнері. Наприклад:

0901z2eh-4014-700x458.png

Тут для мітки lbl контейнером виступає головне вікно – root. Однак графічний додаток може мати складнішу структуру з безліччю вкладених контейнерів. І для кожного віджету можна явно встановити контейнер за допомогою першого параметра конструктора, який називається master . Наприклад, у прикладі вище ми могли б явно прописати для Label батьківський контейнер:

0901z2ek-6d8a-940x125.png

В даному випадку це немає сенсу, кнопка за замовчуванням додається у вікно. Однак ми можемо визначати вкладені контейнери. Зокрема, для Tkinter призначений віджет Frame .

Frame

Frame відображає прямокутник і зазвичай застосовується для організації інтерфейсу окремі блоки. Деякі основні параметри, які ми можемо встановити через конструктор класу Frame:

  • borderwidth : товщина межі кадру, за умовчанням дорівнює 0

  • relief : визначає тип кордону, може приймати значення SUNKEN, RAISED, GROOVE, RIDGE

  • cursor : встановлює курсор при наведенні на кадр

  • height : висота кадру

  • width : ширина кадру

  • padding : відступи від вкладеного вмісту до меж кадру

Використовуємо фрейми:

0901z2em-6d91-940x555.png

Тут фрейм має межу завтовшки один піксель. Кордон представляє звичайну лінію ( relief=SOLID). Також для кадру задані внутрішні відступи: 8 по горизонталі та 10 по вертикалі. Для встановлення відступів можна використовувати такі форми:

0901z2ep-9f01-940x405.png

При цьому ми можемо винести за створення кадру:

0901z2ew-0adb-940x773.png

Тут для створення кадру визначено функцію create_frame, яка повертає кадр з позначкою та текстовим полем. Далі створюємо за допомогою цієї функції два фрейми і додаємо їх у вікно:

0901z2ex-c28e-636x580.png

Listbox

Віджет Listbox tkinter представляє список об'єктів. Варто відзначити, що цей віджет присутній тільки в пакеті tkinter, а в пакеті tkinter.ttk для нього немає аналогів.

Для налаштування Listbox ми можемо вказати у його конструкторі такі параметри:

  • listvariable : список елементів, які додаються до ListBox

  • bg : фоновий колір

  • bd : товщина межі навколо елемента

  • cursor : курсор при наведенні на Listbox

  • font : налаштування шрифту

  • fg : колір тексту

  • highlightcolor : колір елемента, коли він отримує фокус

  • highlightthickness : товщина межі елемента, коли він знаходиться у фокусі

  • relief : встановлює стиль елемента, що за замовчуванням має значення SUNKEN

  • selectbackground : колір фону для виділеного елемента

  • selectmode : визначає, скільки елементів може бути виділено. Може приймати такі значення: BROWSE, SINGLE, MULTIPLE, EXTENDED. Наприклад, якщо необхідно включити множинне виділення елементів, можна використовувати значення MULTIPLE чи EXTENDED.

  • height : Висота елемента в рядках. За промовчанням відображає 10 рядків

  • width : встановлює ширину елемента символів. За замовчуванням ширина – 20 символів

  • xscrollcommand : задає горизонтальне прокручування

  • yscrollcommand : встановлює вертикальне прокручування

Визначимо простий список:

0901z2f6-2a1b-940x504.png

Для наповнення listboxa елементами визначаємо список мов, потім цей список передаємо в змінну типу Variable. Потім прив'язуємо цю змінну до параметра listvariableListbox

0901z2fa-2ae4-642x586.png

Основні методи Listbox

Listbox має ряд методів для керування поведінкою елемента та його вмістом. Деякі з них:

  • curselection() : повертає набір індексів виділених елементів

  • delete(first, last = None) : видаляє елементи з індексами з діапазону [first, last]. Якщо другий параметр опущений, видаляє лише один елемент за індексом first.

  • get(first, last = None) : повертає кортеж, який містить текст елементів із індексами з дипазону [first, last]. Якщо другий параметр опущено, повертається лише текст елемента із індексом first.

  • insert(index, element) : вставляє елемент за певним індексом

  • size() : повертає кількість елементів

Для розгляду цих методів напишемо невеликий скрипт з управління даними:

0901z2ff-4ffe-940x988.png

Для маніпулювання елемента списку тут визначено дві кнопки. Перша кнопка викликає функцію add(), яка отримує введене в текстове поле значення та додає його на перше місце у списку за допомогою методу insert() .

Друга кнопка натискання видаляє виділений елемент. Для цього ми спочатку отримуємо виділені індекси через метод curselection() . Так як у нашому випадку виділяється лише один елемент, то отримуємо його індекс через вираз selection[0]. І цей індекс передаємо метод delete() для видалення.

0901z2fg-41e7-940x436.png

Подібним чином ми можемо керувати елементами, якщо Listbox прив'язаний до змінної типу Var/StringVar:

0901z2fm-fc55-940x732.png

Для спрощення тут я прибрав код для видалення, тому що суть буде такою самою. А саме: у нас є стандартний список рядків languages ​​та є змінна languagesvar, яка використовує цей список і до якої прив'язаний Listbox. Всі операції з елементами всередині Listbox, наприклад, додавання за допомогою дзвінка languageslistbox.insert(0, newlanguage)вплинуть на змінну languagesvar– вона змінить своє значення. Але! Початковий список рядків languages ​​залишиться без змін.

Що, якщо нам також потрібно змінити сам початковий список languages, особливо коли у нас в програмі кілька функціональних частин, які використовують цей список і які мають бути синхронізовані? У цьому випадку ми можемо додавати та видаляти елементи безпосередньо у списку languages, але тоді необхідно встановлювати заново значення змінної languages_var, до якої прив'язаний Listbox:

0901z2fs-5b60-940x820.png

Режим та обробка вибору

За промовчанням Listbox дозволяє вибрати один елемент. Але за допомогою параметра selectmode цю поведінку можна перевизначити. Цей параметр приймає одне з наступних значень:

  • BROWSE: дозволяє вибирати один елемент та перетягувати його мишкою. Режим за промовчанням.

  • EXTENDED: дозволяє вибрати групу елементів, виділивши початковий та кінцевий елементи.

  • SINGLE: дозволяє вибрати один елемент, але не дозволяє перетягувати його мишкою

  • MULTIPLE: дозволяє вибрати велику кількість елементів, надимаючи на рядок елемента.

Наприклад, встановлення вибору кількох елементів:

0901z2ft-19f2-940x107.png

Наприклад, динамічно обробимо вибір у списку:

0901z2fz-5d41-940x654.png

У цьому випадку при зміні вибору списку спрацьовує функція selected. Функція повинна приймати один параметр, який несе інформацію про подію - це параметр event. Хоча в цьому випадку він не використовується.

У самій функції спочатку отримуємо індекси виділених елементів за допомогою методу curselection(), потім у циклі отримуємо власне елементи цих індексів і створюємо загальний рядок, яка потім виводиться в елементі Label.

0901z2g5-d709-620x570.png

Програмне виділення

Ряд методів Listbox дозволяють програмно керувати виділенням елементів:

  • select_set(first, last) : виділяє з індексу first індекс last. Якщо треба виділити лише один елемент, то застосовується лише параметр first

  • select_includes(index) : повертає True, серед елемента з індексом index виділено

  • select_clear(first, last) : знімає виділення з індексу first індекс last. Якщо треба зняти виділення лише з одного елемента, то застосовується лише параметр first

Наприклад, виділимо елементи з 1 по 2 індекси:

0901z2gb-4f05-940x392.png

0901z2ge-3515-628x592.png

2

12 з 24 балів

Мета: Навчитися створювати базовий прапорець та пов'язувати його зі змінною.

Умова: Створіть вікно програми з назвою "Реєстрація". Додайте один прапорець (Checkbutton) з текстом: "Я згоден з умовами використання". Додайте кнопку з текстом "Продовжити".

При натисканні на кнопку має з'являтися віконце showinfo, яке покаже поточний стан галочки: 1 (якщо користувач поставив галочку) або 0 (якщо залишив її порожньою).

Вказівки:

  • Створіть одну змінну agree_var = IntVar().

  • Прив'яжіть її до прапорця через параметр variable.

  • У функції для кнопки зчитайте значення за допомогою agree_var.get() та виведіть його у повідомленні.

3

12 з 24 балів

Мета: Навчитися використовувати параметр command для миттєвого виклику вікна повідомлення при натисканні на прапорець.

Умова: Створіть програму "Налаштування звуку". Додайте один прапорець (Checkbutton) з текстом: "Увімкнути звук у грі".

Зробіть так, щоб кнопка «Надіслати» чи «ОК» була не потрібна. Як тільки користувач натискає на сам прапорець, має одразу вискакувати віконце showinfo з текстом "Стан звуку змінено!".

Вказівки:

  • Створіть змінну sound_var = IntVar().

  • Напишіть просту функцію, яка просто викликає showinfo(title="Звук", message="Стан звуку змінено!").

  • Прив'яжіть цю функцію безпосередньо до прапорця за допомогою параметра command.

Рефлексія від 0 учнів

Сподобався:

0

Так: 0

Ні: 0

Зрозумілий:

0

Так: 0

Ні: 0

Потрібні роз'яснення:

0

Ні: 0

Так: 0

Рекомендуємо

§ 10. Графічні методи модуля tkinter

§ 10. Графічні методи модуля tkinter

481

Аватар профіля Киреєва Оксана Анатоліївна
Інформатика
7 клас

50 грн

Основи колористики.

Основи колористики.

165

Аватар профіля Кучерява Наталія Геннадіївна
Технології
10—12 клас та I—III курси

83 грн

74 грн

Тематична робота з інформатики "Основи інформаційної безпеки"

Тематична робота з інформатики "Основи інформаційної безпеки"

164

Аватар профіля Губчик Вероніка Григорівна
Інформатика
9 клас

25 грн

Основи статистичного аналізу даних. Ряди даних.

Основи статистичного аналізу даних. Ряди даних.

92

Аватар профіля Бєлова Тетяна Іванівна
Інформатика
10 клас

35 грн

Урок 2: Основи HTML — Структура вебсторінки

Урок 2: Основи HTML — Структура вебсторінки

64

Аватар профіля Нікішина Катерина Іванівна
Інформатика
7—12 клас, I—VI курси, дорослі та змішані

41 грн

Основи теорії дизайну. Стиль та композиція в дизайні

Основи теорії дизайну. Стиль та композиція в дизайні

446

Аватар профіля Куленко Марія Миколаївна
Інформатика
11 клас

20 грн

Схожі уроки

Впорядкування, пошук і фільтрування даних.

Впорядкування, пошук і фільтрування даних.

1276

Аватар профіля Вожга Ірина Леонідівна
Інформатика
9 клас

Створення й уведення структури таблиць. Поняття таблиці, поля, запису. Створення таблиць, означення полів і ключів у середовищі СКБД. Властивості полів, типи даних.

Створення й уведення структури таблиць. Поняття таблиці, поля, запису. Створення таблиць, означення полів і ключів у середовищі СКБД. Властивості полів, типи даних.

1090

Аватар профіля Савка-Ржематорська Оксана Василівна
Інформатика
9 клас

Цикли з передумовою у вкладених циклах

Цикли з передумовою у вкладених циклах

1335

Аватар профіля Вожга Ірина Леонідівна
Інформатика
6 клас

Налаштування часових параметрів аудіо- та відеоряду.

Налаштування часових параметрів аудіо- та відеоряду.

489

Аватар профіля Солодовнікова Катерина Олексіївна
Інформатика
8 клас

Елемент керування «кнопка». Поняття об’єкту та його властивостей і методів (на прикладі елементів екранної форми). Властивості і методи елементів керування.

Елемент керування «кнопка». Поняття об’єкту та його властивостей і методів (на прикладі елементів екранної форми). Властивості і методи елементів керування.

642

Аватар профіля Пилипенко Олена Володимирівна
Інформатика
8 клас

Елемент керування кнопка

Елемент керування кнопка

267

Аватар профіля Пилипенко Олена Володимирівна
Інформатика
8 клас