Rozdział 16 · Tworzenie fajnych aplikacji z Tkinter
Od terminala do modelu zdarzenia GUI:
Głównym intelektualnym przejściem tego rozdziału jest to, że zarządzanie nie płynie już w jednej ciągłej linii.
Terminal: Wykonanie sekwencyjne
Program terminala działa przewidywalnie, łańcuch znaków za linią sterowanie zawsze znajduje się na Sam program:
GUI: Realizacja oparta na zdarzeniach
Aplikacja okienna buduje interfejs raz, a następnie czeka na wydarzenie — i odpowiada na każdą osobną, wcześniej zarejestrowaną częścią kodu:
inicjalizacja interfejsu
przejście do pętli zdarzeń
↓mainloop()
użytkownik kliknął
↓wydarzenie: kliknij
powiązana funkcja nazywana jest
↓callback wykonuje się
callback powrócił
↓znowu czekać
Źródła zdarzeń
Skąd pochodzą zdarzenia
Użytkownik
kliknięcie myszką
wprowadzanie tekstu
działanie okienne
System
przemalowanie
zmiana rozmiaru okna
Program
Timer/after() – Rozdział 16.22
Wydarzenie, callback, command — nie są synonimami
| Termin | Co to jest |
|---|---|
| Zdarzenie (event) | co się stało – klik, enter, timer |
| Callback | funkcja/wywołanie zarejestrowane wcześniej, aby zostać wywołane później |
| command | jeden ze sposobów, by Tkinter powiązać callback z konkretnym widżetem |
Rejestracja callback jeszcze nie spełnia jego obowiązków:
registraciya_vs_vypolnenie.py
log = []
def on_click():
log.append("clicked")
registered = on_click # rejestracja: callback zapamiętana, ale NIE wezwana
print(log) # []
registered() # Dyspozytornia: callback właśnie działa
print(log) # ['clicked']
To bezpośrednie powiązanie z rozdziałem 13
Funkcja jako obiekt, który można przekazać i wywołać później — dokładnie to samo „funkcja bez nawiasów”, o której była mowa w sekcji 16.2 o
command. Model wydarzeń Tkinter całkowicie oparty na tym pomyśle.Praktyka: rejestracja i wysyłka callback
Sprawdzane bez tkinter — czysta logika na funkcjach-obiektach