2

我在一个固定的盒子里画了很多移动的粒子。我的盒子一直在那里,不会随着时间的推移而改变,而粒子需要更新。Tkinter

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

canvas.delete(ALL)

它确实有效帧更新变得非常缓慢。这是因为我的盒子是不规则的形状,这意味着我必须逐点绘制盒子。所以这种删除一切并重绘一切的方法是不能令人满意的。

我希望该框只绘制一次,并且只有粒子被删除和重绘(更新)。我该怎么做?

4

2 回答 2

1

假设您在 上有一个矩形canvas

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

这将返回 a 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")
于 2013-10-25T17:51:33.317 回答
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方法还可以接受特定的绘图。

于 2013-10-25T17:52:18.580 回答