Глава 18 · Инструменты рисования
Живое превью: coords()
Один элемент создаётся один раз и много раз обновляется — вместо потока одноразовых фигур.
Не пересоздавать фигуру на каждое движение
Наивный подход к превью — на каждом <B1-Motion> удалять
старую черновую фигуру и создавать новую. Работает, но заставляет Canvas без остановки
выбрасывать и заново строить элементы — а заодно теряет любые индивидуальные настройки,
которые вы, возможно, ставили только один раз.
zhivoe_prevyu.py
def on_press(self, event):
self.state.preview_id = self.canvas.create_rectangle(
event.x, event.y, event.x, event.y,
outline=self.state.color, width=self.state.width, dash=(4, 2),
)
def on_drag(self, event):
self.canvas.coords(
self.state.preview_id,
self.state.start_x, self.state.start_y, event.x, event.y,
)
coords() принимает столько чисел, сколько нужно фигуре
Для линии и прямоугольника — четыре числа (две точки). Для многоточечной ломаной (например, растущего карандашного контура) — сколько угодно пар
x, y. Главное — вызывать coords() с тем же item_id, что вернул исходный create_*.Практика: живое превью через coords()
Модуль tkinter открывает нативное окно Python — выполните локально в VS Code, PyCharm или Jupyter
Практика выполняется локально