Rozdział 17 · Wydarzenia głębiej
Mouse Enter/Leave i hover
Najazd kursorem — zdarzenie samo w sobie, bez kliknięcia. Idealne dla wizualnych podpowiedzi.
Enter / Leave – idealne do efektów wizualnych
kursor wchodzi do klatki
↓
<Enter>
on_cell_enter(index)
bez klikania
↓kursor opuszcza komórkę
↓
<Leave>
on_cell_leave(index)
hover_bind.py
button.bind(
"<Enter>",
lambda _event, i=index: self.on_cell_enter(i),
)
_event jest celowo nieużywaną nazwą
Callback od
.bind() jest zobowiązany zaakceptować ten argument event, nawet jeśli nie jest potrzebna w środku. Imię _event (podkreślone) to powszechny sygnał „parametr istnieje na żądanie sygnatury, ale nie jest świadomie używany”Binding scope — gdzie więź jest ważna
| Challenge | Zakres |
|---|---|
widget.bind(...) | tylko dla tego konkretnego widgetu |
root.bind(...) | dla głównego okna (np. globalne klawisze gry) |
TROCHĘ GŁĘBIEJ — bind_class / bind_all
Tk również wspiera
bind_class(...) (wszystkie widżety tej samej klasy) oraz bind_all(...) (dosłownie cała aplikacja). W rozdziale 17 nie są potrzebne — są wspomniane, żebyś wiedział, że istnieją, jeśli będziesz ich potrzebować w swoich projektach.NIECO GŁĘBIEJ — add=«+» i unbind()
Domyślnie
bind(sequence, callback) ZASTĘPUJE poprzedni uchwyt tej samej sekwencji na tym widżecie. Opcjonalny trzeci argument add="+" zamiast zamiany dodaje JESZCZE JEDEN uchwyt — oba zostaną wywołane. widget.unbind(sequence) całkowicie usuwa kotwicę. Dla rozdziału 17 nie są potrzebne — ale Debug Lab 17 (Rozdział 17.29) pokazuje, dlaczego nieostrożność add="+" może uruchomić ten sam kod dwa razy, nie zauważając tego.Praktyka: hover aż do Enter/Leave
Moduł tkinter otwiera natywne okno Python — wykonaj lokalnie w VS Code, PyCharm lub Jupyter
Praktyka kursuje lokalnie