Глава 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— ползунок для выбора числа в диапазоне.- Палитра из нескольких похожих кнопок эффективнее строится циклом, чем вручную одна за другой.