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.

Kliknij okno licznika z wartością 3 i przyciskiem +1
Wynik wykonania kodu poniżej, po trzech kliknięciach. Przykład wyglądu w środowisku kursu. Na Twoim systemie operacyjnym czcionki, rozmiary i temat mogą się nieznacznie różnić.
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()!
# Скрипт завершается почти сразу — окно либо не появляется,
# либо мгновенно закрывается, не дожидаясь никаких действий пользователя.
Co widać na ekranie

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
Otwórz praktykę →