2015-10-14 4 views
0

Я пытаюсь, чтобы линия за мышью вокруг холста. Пока я могу создавать строки, но я не уверен, как удалить старые строки, поэтому экран просто заполняется черными линиями. Я хотел бы удалить старые, но сохранить те, где находится мышь. Мой код:Как удалить и создать новые строки одновременно

def evt_motion(self, e): 
     plot = Plotter 
     self.set_position(e.x, e.y) 
     hstart = (e.x, 0) 
     hend = (e.x, 1000) 
     vstart = (0, e.y) 
     vend = (1000, e.y) 
     hor = self.canvas.create_line(hstart, hend) 
     ver = self.canvas.create_line(vstart, vend) 
+0

Один из способов, чтобы нарисовать новую линию над старым, используя цвет фона. Если вам не нужно беспокоиться о пересечении линий, это сделает трюк. – Prune

+0

Спасибо, Но я хочу, чтобы это выглядело так, будто есть перекрестия, которые движутся с помощью мыши. –

+0

Я понятия не имею, какую платформу вы используете. Можете ли вы объявить слои объектов? Если это так, тогда вы просто помещаете перекрестие на передний слой. Есть ли у вашей системы концепция «спрайт»? Перекрестие сделало бы хороший спрайт. В противном случае вы можете просто удалить или перезаписать старый значок, а затем нарисовать новый. – Prune

ответ

0

При создании строки, он возвращает идентификатор. Вы можете использовать этот идентификатор для удаления строки. Если, например, ваши переменные 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) 
Смежные вопросы