2

動かない箱の中にたくさんの動く粒子を描いています。私のボックスは常にそこにあり、時間が経っても変化しませんが、パーティクルは更新する必要があります。Tkinter

私の最初の直感は、すべてのもの (パーティクルとボックスの両方) を削除してから、すべてを再描画することです。

canvas.delete(ALL)

確かに機能します、フレームの更新は非常に遅くなります。これは、ボックスが不規則な形をしているためです。これは、ボックスをドットごとに描画する必要があることを意味します。したがって、このすべてを削除してすべてを再描画する方法は不十分です。

ボックスが一度だけ描画され、パーティクルのみが削除され、再描画 (更新) されることを望みます。どうすればいいですか?

4

2 に答える 2

1

に長方形があるとしますcanvas:

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

これは を返すhandleので、それを追跡すると、

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

これにより、myRectangle オブジェクトのみが削除されます。

もう 1 つの方法は、タグを使用することです。

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()

に加えてALLdeleteメソッドは特定の図面を受け入れることもできます。

于 2013-10-25T17:52:18.580 に答える