Глава 17 · Интерфейс игры

Визуальный стиль X/O

X и O должны различаться с первого взгляда — и не только по цвету.

Палитра игры — сначала увиденная, потом числовая

Игрок X
#5B24F9
Игрок O
#DB2777
Победная линия
#059669
Недоступно (конец игры)
#6B6B7D

X — фиолетовый (#5B24F9), O — розовый (#DB2777) — те же фирменные цвета курса, что и везде на сайте. Победная линия подсвечивается мягким зелёным фоном, а после конца игры отметки становятся приглушёнными — виджет disabled сигнализирует «здесь больше нельзя ходить».

Почему здесь используется классический tk.Button, а не ttk

Осознанный выбор, а не «забыли про ttk»
Глава 16 учит предпочитать ttk там, где есть тематизированный аналог (раздел 16.12). Но покраска отдельной клетки в цвет игрока напрямую через fg=/bg= — именно то, что tk.Button делает просто и предсказуемо, а тема ttk обычно перекрывает подобную покраску по виджету через ttk.Style(). Рамка, статус и счёт при этом всё равно построены на ttk — выбор виджета принят осознанно ради конкретной задачи, не по привычке.
cvet_otmetki.py
MARK_COLOR = {"X": "#5B24F9", "O": "#DB2777"}

btn.config(text=mark, fg=MARK_COLOR.get(mark, "#0D0230"))
Не только цвет — ещё и буква, и текст статуса
Победителя видно не только по зелёной подсветке: буквы «X»/«O» остаются на месте, а статус явно пишет «Победил игрок X!». Это важное правило доступности: нельзя полагаться только на цвет как на единственный сигнал.
Практика: покраска X и O
Модуль tkinter открывает нативное окно Python — выполните локально в VS Code, PyCharm или Jupyter
Практика выполняется локально
Открыть практику →