我在{strong>固定框中使用Tkinter
绘制了大量移动粒子。我的盒子总是在那里,随着时间的推移不会改变,而粒子需要更新。
我的第一个直觉是删除所有的东西(粒子和盒子),然后重绘一切。
canvas.delete(ALL)
确实有效,但框架更新非常慢。这是因为我的盒子是不规则的形状,这意味着我必须逐点绘制盒子。所以这个删除 - 所有 - 并且重绘 - 所有方法都不能令人满意。
我希望框仅绘制一次,只删除和重绘(更新)。我该怎么做?
答案 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
方法还可以接受特定的绘图。