如何有选择地删除Tkinter中的图纸?

时间:2013-10-25 17:31:54

标签: python tkinter

我在{strong>固定框中使用Tkinter绘制了大量移动粒子。我的盒子总是在那里,随着时间的推移不会改变,而粒子需要更新。

我的第一个直觉是删除所有的东西(粒子和盒子),然后重绘一切。

canvas.delete(ALL)

确实有效框架更新非常慢。这是因为我的盒子是不规则的形状,这意味着我必须逐点绘制盒子。所以这个删除 - 所有 - 并且重绘 - 所有方法都不能令人满意。

我希望框仅绘制一次只删除和重绘(更新)。我该怎么做?

2 个答案:

答案 0 :(得分:0)

假设您在canvas上有一个矩形:

canvas.create_rectangle(x0, y0, x1, y1)

这会返回handle,所以如果你跟踪它,

myRectangle = canvas.create_rectangle(x0, y0, x1, y1)
canvas.delete(myRectangle)

这将仅删除myRectangle对象。

另一种方法是使用标签。

canvas.create_rectangle(x0, y0, x1, y1, tags="myRectangle")
canvas.delete("myRectangle")

答案 1 :(得分:0)

您需要做的是将图形分配给变量,然后删除它们。以下脚本演示了这一点:

from Tkinter import Button, Canvas, Tk

root = Tk()

canvas = Canvas()
canvas.grid()

drawing1 = canvas.create_oval((10,50,20,60), fill="red")
drawing2 = canvas.create_oval((30,70,40,80), fill="blue")

Button(text="Kill 1", command=lambda: canvas.delete(drawing1)).grid()
Button(text="Kill 2", command=lambda: canvas.delete(drawing2)).grid()

root.mainloop()

除了ALL之外,delete方法还可以接受特定的绘图。