Rozdział 17 · Interfejs gry

Adaptacyjne pole gry

Gra nie powinna się rozpadać po zmianie rozmiaru okna — grid() i weight rozwiązują to tak samo jak w rozdziale 16.

Pole nie powinno stać się kruchą strukturą widżetów o stałym rozmiarze

adaptivnoe_pole.py
# outer — kontener nadrzędny (build_ui); łańcuch znaków 1 — to pola łańcuch znaków)
outer.rowconfigure(1, weight=1)

board_frame = ttk.Frame(outer)
board_frame.grid(row=1, column=0, columnspan=3, sticky="nsew")
for i in range(3):
    board_frame.rowconfigure(i, weight=1)
    board_frame.columnconfigure(i, weight=1)

for index in range(9):
    btn = tk.Button(board_frame, text="", font=("Arial", 28, "bold"), width=3, height=1)
    btn.grid(row=index // 3, column=index % 3, sticky="nsew", padx=3, pady=3)
sticky='nsew' + weight — na KAŻDYM poziomie zagnieżdżenia
Te same techniki adaptacyjne grid()jak w sekcji 16.15 — ale muszą być stosowane na obu poziomach jednocześnie. Wewnątrz board_frame już nie wystarczy nadać wagę wierszom/kolumnom, jeśli sam board_frame nie rozciąga się w swojej komórce outer: potrzeba I outer.rowconfigure(1, weight=1) na rodzica, I sticky="nsew" faktycznie board_frame.grid(). Pomiń którekolwiek z dwóch — a pole przestanie rosnąć wraz z oknem w pionie.
Nie obiecujemy idealnie kwadratowych kwadratów na każdej platformie
width=3, height=1 u tk.Button ustawia rozmiar w jednostkach tekstowych (znaki/czcionki łańcuch znakówx) zamiast pikseli — dokładny stosunek obrazu zależy od czcionki i tematu danego systemu operacyjnego. Sprawiamy, że pole jest responsywne i uporządkowane — nie gwarantujemy matematycznie dokładnego kwadratu na wszystkich platformach jednocześnie.

Widoczne w prawdziwym oknie, nie tylko w kodzie

Po lewej — normalny rozmiar okna, po prawej — to samo okno po powiększeniu: ten sam stan gry, ale pola znacznie większe
Ta sama aplikacja i ten sam stan partii. Po lewej stronie jest oryginalny rozmiar okna, po prawej to samo okno po powiększeniu. Komórki zyskują dodatkową przestrzeń dzięki weight i sticky=„nsew”
Praktyka: Pole adaptacyjne przy zmianie rozmiaru okna
Moduł tkinter otwiera natywne okno Python — wykonaj lokalnie w VS Code, PyCharm lub Jupyter
Praktyka kursuje lokalnie
Otwórz praktykę →