Rozdział 17 · Projekt: „Kółko-krzyżyk”
Podczas naciśnięcia przycisku rysujemy na nim
Każdy przycisk powinien znać swój numer – jedna z najsłynniejszych subtelności Python. jest tu ukryta
Każdy przycisk potrzebuje własnej funkcji obsługi klików, która wie o tym jaka dokładnie
przycisk jest naciskany. Sztuczka polega na podłączeniu command z numerem
przycisku — do tego używamy funkcji lambda z rozdziału 13:
risuem_na_knopke.py
def na_knopku_nazhali(indeks):
global tekuschij_igrok
if polya[indeks]["text"] != "":
return # komórka już zajęta
polya[indeks]["text"] = tekuschij_igrok
tekuschij_igrok = "O" if tekuschij_igrok == "X" else "X"
# przy tworzeniu każdego przycisku:
knopka.config(command=lambda i=indeks: na_knopku_nazhali(i))
Dlaczego lambda i=indeks a nie tylko lambda: na_knopku_nazhali(indeks)?
Bez
i=indeks wszystkie dziewięć przycisków pamiętało tę samą zmienną indeks — nie jego wartości w momencie tworzenia. W momencie kliknięcia cykl już dawno się zakończy, i indeks będzie 8 dla wszystkich przycisków jednocześnie. Domyślnie i=indeks „zamraża” aktualną wartość przy tworzeniu każdej lambdy — klasyczny i ważny niuans Python.
Praktyka: Przetwarzanie kliknięcia na komórce pola
Moduł tkinter otwiera natywne okno Python — wykonaj lokalnie w VS Code, PyCharm lub Jupyter
Praktyka kursuje lokalnie