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:

Krok 1print(...)Krok 2input(...)Krok 3następny łańcuch znaków
Terminal: program decyduje, kiedy i co zrobić dalej.

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ć
Control nie pozostaje na jednej ciągłej sekwencji kodu — przekazuje się między handlerami.

Ź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

TerminCo to jest
Zdarzenie (event)co się stało – klik, enter, timer
Callbackfunkcja/wywołanie zarejestrowane wcześniej, aby zostać wywołane później
commandjeden 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
Otwórz praktykę →