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

Квадраты и прямоугольники! Круги и овалы!

Canvas умеет рисовать готовые фигуры по двум углам — не только линии.

Прямоугольники и овалы рисуются похожим образом — Canvas умеет строить их сразу по двум противоположным углам, без ручного вычисления сторон:

pryamougolniki_ovaly.py
def vo_vremya_risovaniya(event):
    if tekuschaya_figura == "pryamougolnik":
        canvas.create_rectangle(
            start_x, start_y, event.x, event.y,
            outline=tekuschij_cvet, width=tolschina,
        )
    elif tekuschaya_figura == "oval":
        canvas.create_oval(
            start_x, start_y, event.x, event.y,
            outline=tekuschij_cvet, width=tolschina,
        )
Реальное окно: прямоугольник, нарисованный между точкой нажатия и точкой отпускания
Реальное окно: create_rectangle() по двум противоположным углам.
Реальное окно: овал, вписанный в область между точкой нажатия и точкой отпускания
Реальное окно: create_oval() по тем же двум углам — подробнее об этом в разделе 18.17.
Промежуточные фигуры множатся
Если рисовать так, как показано выше, при каждом движении мыши будет создаваться новая фигура поверх предыдущей — а не одна, растущая вместе с движением. В полной программе (раздел 18.7) эта проблема решена: предыдущая «черновая» фигура удаляется перед тем, как нарисовать новую. Раздел 18.18 показывает более аккуратный способ — обновлять один и тот же элемент через coords(), вместо того чтобы пересоздавать его заново.
Практика: прямоугольники и овалы
Модуль tkinter открывает нативное окно Python — выполните локально в VS Code, PyCharm или Jupyter
Практика выполняется локально
Открыть практику →