Rozdział 16 · Tworzenie fajnych aplikacji z Tkinter
Mini-projekt: licznik kliknięć
Mały projekt, ale prawdziwa interakcja: kliknij → callback → zmień stan → odśwież ekran.
Najmniejszy prawdziwy szkic rozdziału: liczba kliknięć. Dobra okazja, by zobaczyć oba sposób przechowywania numeru powiązanego z widżetem.
schetchik_intvar.py
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.title(„Kliknij licznik”)
schet = tk.IntVar(value=0)
ttk.Label(root, textvariable=schet, font=("Arial", 24)).pack(pady=20)
def na_klik():
schet.set(schet.get() + 1)
ttk.Button(root, text="+1", command=na_klik).pack(pady=10)
root.mainloop()
Druga metoda to bez zmiennej Tk-
Ten sam miernik można zmontować z normalnym
int i jawne label.config(text=...) po każdej zmianie – działa równie dobrze; IntVar jest przydatny, gdy wartość musi być synchronizowana z wieloma widgetami jednocześnie (Rozdział 16.4).Debug Lab 5: Zapomniałem mainloop() – okno nie działa tak, jak powinno
bez_mainloop.py
root = tk.Tk()
ttk.Button(root, text="+1").pack()
# zapomniano root.mainloop()!
# Скрипт завершается почти сразу — окно либо не появляется,
# либо мгновенно закрывается, не дожидаясь никаких действий пользователя.
Bez root.mainloop() program nie przechodzi do pętli obsługi zdarzeń (rozdział 16.10) — po prostu liniowo dochodzi do końca skryptu i kończy działanie jak zwykły program terminalowy. Widżety są stworzone i nawet umieszczone, ale nikt nie czeka na kliknięcia w nie.
Poprawiony kod
s_mainloop.py
root = tk.Tk()
ttk.Button(root, text="+1").pack()
root.mainloop() # bez tego przywoływania wydarzeń nie będzie żadnych wydarzeń
Praktyka: licznik kliknięć
Moduł tkinter otwiera natywne okno Python — wykonaj lokalnie w VS Code, PyCharm lub Jupyter
Praktyka kursuje lokalnie