我正试图在画布周围跟着鼠标。到目前为止,我可以创建线条,但我不知道如何删除旧线条,因此屏幕只会填满黑线。我想删除旧的,但保留鼠标所在的那些。 我的代码是:
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 :(得分:0)
创建一行时,它会返回一个标识符。您可以使用此标识符删除该行。例如,如果您的hor
和ver
变量是全局变量,则可以使用它们删除旧行。
例如:
self.canvas.delete(hor)
self.canvas.delete(ver)
您还可以将标记应用于线条,这样您就不必跟踪ID。一个标签可以与一个或多个对象相关联。为两行提供相同的标记意味着您可以使用单个命令删除它们。
例如:
hor = self.canvas.create_line(hstart, hend, tags=("crosshair",))
ver = self.canvas.create_line(vstart, vend, tags=("crosshair",))
...
self.canvas.delete("crosshair")
但是,没有必要删除并重新创建该行。您只需修改现有线的坐标即可。通过为每行提供唯一标记,您可以再次使用标记而不是ID。与每次鼠标移动时删除和重新创建行相比,这将显着提高性能。
例如:
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)