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
Praktyka: Pole adaptacyjne przy zmianie rozmiaru okna
Moduł tkinter otwiera natywne okno Python — wykonaj lokalnie w VS Code, PyCharm lub Jupyter
Praktyka kursuje lokalnie