Rozdział 17 · Interfejs gry

Sterowanie klawiaturą

1-9 to te same ruchy co kliknięcie myszką, przez ten sam kod.

Mysz i klawiatura spotykają się w jednym punkcie

Button command(klik)klawiaturaBinding (1-9)attempt_move(index)
Obie ścieżki prowadzą do JEDNEJ I TEJ SAMEJ funkcji — zasady się nie dublują.
keyboard_control.py
def on_key(self, event):
    if event.keysym in ("r", "R"):
        self.new_round()
        return
    if event.char and event.char.isdigit():
        n = int(event.char)
        if 1 <= n <= 9:
            self.attempt_move(n - 1)   # klawisz 1 -> indeks 0, ... 9 -> indeks 8
Klawiatura nie otrzymuje swojej kopii zasad
Obsługa klawiatury TYLKO przekształca wciśnięty klawisz na numer pola i wywołuje attempt_move() jest tą samą funkcją, która powoduje kliknięcie myszką. Jeśli ścieżka klawiatury kopiowała sprawdzenie zwycięzcy osobno, oba zestawy zasad ostatecznie się rozdzieliły (Debug Lab 9, sekcja 17.29 – podobny błąd z literówką w linijce).
KlawiszIndeks Komórki
10
21
32
43
54
65
76
87
98
keysym przeciwko char – char jest tu wybierany
Rozdział 17.8 pokazała różnicę: event.char to faktyczny wpisany znak. Dla klawiszy numerycznych w górnym rzędzie jest on przewidywalnie równy samej liczbie; z dodatkową klawiaturą numeryczną (NumPad) zachowanie jest zwykle takie samo, jeśli NumLock jest włączone, ale może się różnić w zależności od platformy, układu i stanu NumLock — jeśli klawiatura jest ważna dla Twojego projektu, przetestuj obie opcje na docelowym systemie. Tutaj event.char jest nadal wygodniejsze niż porównanie przez event.keysym.
Praktyka: Klucze 1-9 i R
Moduł tkinter otwiera natywne okno Python — wykonaj lokalnie w VS Code, PyCharm lub Jupyter
Praktyka kursuje lokalnie
Otwórz praktykę →