При создании строки, он возвращает идентификатор. Вы можете использовать этот идентификатор для удаления строки. Если, например, ваши переменные hor
и ver
были глобальными, вы можете использовать их для удаления старых строк.
Например:
self.canvas.delete(hor)
self.canvas.delete(ver)
Вы также можете применить тег к линии так, что вам не придется следить за идентификаторами. Один тег может быть связан с одним или несколькими объектами. Предоставление обеим линиям одного и того же тега означает, что вы можете удалить их с помощью одной команды.
Например:
hor = self.canvas.create_line(hstart, hend, tags=("crosshair",))
ver = self.canvas.create_line(vstart, vend, tags=("crosshair",))
...
self.canvas.delete("crosshair")
ОДНАКО, нет необходимости удалять и заново линию. Вы можете просто изменить координаты существующей строки. Предоставляя каждой строке уникальный тег, вы можете снова использовать тег, а не идентификатор. Это приведет к значительному повышению производительности при удалении и воссоздании строки при каждом перемещении мыши.
Например:
hor = self.canvas.create_line(hstart, hend, tags=("hor_line",))
ver = self.canvas.create_line(vstart, vend, tags=("ver_line",))
...
self.canvas.coords("hor_line", e.x, 0, e.x, 1000)
self.canvas.coords("ver_line", 0, e.y, 1000, e.y)
Один из способов, чтобы нарисовать новую линию над старым, используя цвет фона. Если вам не нужно беспокоиться о пересечении линий, это сделает трюк. – Prune
Спасибо, Но я хочу, чтобы это выглядело так, будто есть перекрестия, которые движутся с помощью мыши. –
Я понятия не имею, какую платформу вы используете. Можете ли вы объявить слои объектов? Если это так, тогда вы просто помещаете перекрестие на передний слой. Есть ли у вашей системы концепция «спрайт»? Перекрестие сделало бы хороший спрайт. В противном случае вы можете просто удалить или перезаписать старый значок, а затем нарисовать новый. – Prune