Глава 18 · Проект: приложение для рисования

Я закончил рисовать! Полная программа

Последние штрихи — очистка холста и свободное рисование — и полная работающая программа целиком.

Я закончил рисовать!

Осталось добавить кнопку очистки холста и режим «свободного рисования» (карандаш) — для него точки рисуются на каждое движение мыши без привязки к начальной точке:

ochistka_i_svobodno.py
def ochistit_holst():
    canvas.delete("all")

def vo_vremya_risovaniya(event):
    if tekuschaya_figura == "svobodno":
        canvas.create_oval(
            event.x - tolschina, event.y - tolschina,
            event.x + tolschina, event.y + tolschina,
            fill=tekuschij_cvet, outline=tekuschij_cvet,
        )
        return
    # ... остальные фигуры, как в разделе 18.5

Полная программа

Полная версия приложения, включая исправленную отрисовку «черновых» фигур во время перетаскивания мыши, доступна отдельным файлом:

📄 projects/tkinter/paint-app/paint_app.py

★★ Самостоятельная задача
Кнопка «Отменить»

Сохраняйте id каждой нарисованной фигуры (canvas.create_* возвращает id) в список — и добавьте кнопку, удаляющую последнюю через canvas.delete(id).

★★★ Задача повышенной сложности
Сохранение рисунка

Изучите модуль tkinter.filedialog и попробуйте добавить кнопку «Сохранить» — как минимум сохраняющую список нарисованных фигур в текстовый файл (глава 15).

Итоги

Что мы узнали в этой главе

  • Canvas — виджет Tkinter для рисования линий и фигур по координатам; координаты растут вправо и вниз от левого верхнего угла.
  • canvas.create_line/rectangle/oval(...) рисуют готовые фигуры по координатам.
  • События мыши (<Button-1>, <B1-Motion>, <ButtonRelease-1>) отслеживают клик, перетаскивание и отпускание кнопки мыши.
  • Scale — ползунок для выбора числа в диапазоне.
  • Палитра из нескольких похожих кнопок эффективнее строится циклом, чем вручную одна за другой.