Глава 18 · Инструменты рисования

Система цвета

Шесть быстрых цветов и colorchooser для любого другого — цвет нужно видеть, а не только читать hex-код.

Цвет нужно видеть, а не только читать в коде

Шесть цветов палитры финального приложения — не абстрактные строки, а конкретные оттенки:

Чёрный
#111827
Красный
#dc2626
Синий
#2563eb
Зелёный
#16a34a
Оранжевый
#f59e0b
Фиолетовый
#7c3aed
Реальное окно: ряд цветных кнопок палитры над холстом
Реальное окно: та же палитра — каждая кнопка красится в свой bg=hex_color.

Свой цвет — через colorchooser

Готовая палитра — это только шесть вариантов. Модуль tkinter.colorchooser открывает нативный системный диалог выбора любого цвета:

custom_color.py
from tkinter import colorchooser

def choose_custom_color(self):
    _rgb, hex_color = colorchooser.askcolor(color=self.state.color, title="Выберите цвет")
    if hex_color is not None:
        self.set_color(hex_color)
Схема диалога (не настоящий скриншот)
Выберите цвет
Текущий: #7c3aed
Отмена
OK
Схема нативного диалога colorchooser — под headless Xvfb он не рендерится предсказуемо без реального клика пользователя, поэтому здесь показана его структура, а не скриншот.
askcolor() может вернуть (None, None)
Если пользователь нажимает «Отмена», askcolor() возвращает (None, None), а не какой-то цвет по умолчанию. Код обязан проверить hex_color is not None перед использованием — иначе следующий вызов, ожидающий строку вроде "#7c3aed", получит None и упадёт с ошибкой.
Реальное окно: текущий цвет в панели инструментов изменился на нестандартный оттенок, выбранный через диалог
Реальное окно: результат выбора пользовательского цвета — сам диалог в кадр не попал, но эффект от него виден по-настоящему.
Практика: палитра и пользовательский цвет
Модуль tkinter открывает нативное окно Python — выполните локально в VS Code, PyCharm или Jupyter
Практика выполняется локально
Открыть практику →