Rozdział 17 · Wydarzenia głębiej

Event, callback, command i binding

„Tkinter przyciski to gra”

Kto wywołuje on_click()?

Porównajmy dwa znane sposoby uzyskania akcji od użytkownika.

posledovatelno.py
imya = input(„Jak masz na imię?”)
print(f"Cześć, {imya}!")

Wszystko jest tu proste: sam program, w dobrze znanym wierszu kodu, pyta i czeka na odpowiedź.

gui.py
def on_click():
    print(„Przycisk naciśnięty”)

button = ttk.Button(root, text="OK", command=on_click)

Kto dzwoni on_click()? Nie my — nie w kodzie Smyczki on_click(). Funkcję można wykonać w sekundę, za godzinę lub nigdy, w zależności od tego, czy użytkownik naciśnie przycisk.

swój kod
rejestruje callback
czeka / przetwarza
Pętla Zdarzeń
działanie użytkownika
Tk powoduje callback
twój kod jest wykonywany
powrót do pętli zdarzeń
Callback — kod, którego wywołanie jest odkładane do momentu wystąpienia zdarzenia.
Odpowiedź
Callback przyczyny Tk system wydarzeń — w momencie, gdy następuje odpowiadająca mu akcja użytkownika (lub inne zdarzenie). Nie Twój kod, nie interpreter Python sam w sobie.

Event, callback, command binding to cztery różne słowa

TerminCo to jest
EVENT (wydarzenie)Fakt: coś się wydarzyło — klik, naciśnięcie klawisza, najechanie kursorem
CALLBACK (nawiązanie do powrotu)Funkcja wywołana W ODPOWIEDZI na zdarzenie
COMMAND (drużyna)Wysokopoziomowy hak dla konkretnego widżetu dla jego głównej akcji (np. kliknięcie Button)
BINDING (wiązanie)Powiązanie między zdarzeniem (sekwencją) a callback-funkcją
Są ze sobą powiązane, ale nie wymienne
Wydarzenie to TO, co się wydarzyło. Callback to funkcja, która ZAREAGUJE. Command to przypadek szczególny, specyficzny dla konkretnego widżetu. Binding to mechanizm, który łączy wydarzenie z callbackiem. Mieszanie tych słów jest źródłem zamieszania w wyjaśnianiu własnego kodu.
Praktyka: klasyfikacja event/callback/command/binding
Automatyczna walidacja — kategoryzacja przykładów krótkich kodów według tych czterech terminów
Otwórz praktykę →