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
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