Rozdział 16 · Tworzenie fajnych aplikacji z Tkinter

Jak działa pętla zdarzeń i mainloop

mainloop() nie jest czarną skrzynką ani „zamrożeniem”

Pętla zdarzeń – nie Python while True

Co naprawdę dzieje się w mainloop()
Nie myśl o tym mainloop() jak o waszym własnym while True: ... jest wewnętrzną pętlą zdarzeń Tcl/Tk. Poniższy model ma charakter koncepcyjny, aby zrozumieć kolejność zdarzeń, a nie opisuje faktyczną implementację.
inicjalizacji UI
mainloop()
oczekiwanie / obsługa zdarzeń
Tak
wydarzenie?
Call Handlera
callback
return
callback powrócił
↺ Powrót do oczekiwania
następne zdarzenie
Pętla zdarzeń: inicjalizacja → mainloop → oczekiwanie → dyspozycja → ponowne oczekiwanie.

Kolejność zdarzeń — przewidywalna, ale nie sekwencyjna w kodzie

sobytijnyj_cikl.py
log = []

def on_click(): log.append("click")
def on_timer(): log.append("timer")
def on_type(): log.append("type")

handlers = {"click": on_click, "timer": on_timer, "type": on_type}

def run_event_loop(queue):
    for event in queue:
        handlers[event]()

run_event_loop(["click", "timer", "type"])
print(log)   # ['click', 'timer', 'type']

Prawdziwe zdarzenia Tkinter pojawiają się, gdy użytkownik i system działają, ale idea jest ta sama To samo: kolejka zdarzeń jest przetwarzana pojedynczo i każda zaczyna własny callback.

Długi callback to osobny temat
Dopóki obsługiwacz działa, pętla zdarzeń czeka na jego zakończenie, zanim przejdzie do następnego zdarzenia. Co się dzieje, jeśli callback działa zbyt długo — szczegółowo w rozdziałach 16.22 i 16.24.
Praktyka: Kolejność obsługi zdarzeń
Inspekcja bez tkinter — symulacja kolejki zdarzeń na czystej Python
Otwórz praktykę →