如何同时删除和创建新行

时间:2015-10-14 20:30:25

标签: python python-3.x tkinter

我正试图在画布周围跟着鼠标。到目前为止,我可以创建线条,但我不知道如何删除旧线条,因此屏幕只会填满黑线。我想删除旧的,但保留鼠标所在的那些。 我的代码是:

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)

1 个答案:

答案 0 :(得分:0)

创建一行时,它会返回一个标识符。您可以使用此标识符删除该行。例如,如果您的horver变量是全局变量,则可以使用它们删除旧行。

例如:

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)