Graphics.py:如何清除window?

Graphics.py: How to clear the window?

我有一个 window,我正在将图像渲染到它上面。每一帧位置都会改变,所以问题是(显然)它不会从最后一帧消失。我想清除 window 每一帧。我在任何地方都找不到 window 对象 (GraphWin) 的任何明确方法。而且我不能使用 undraw(),因为那样我就必须为屏幕上的所有内容执行此操作。

首先要考虑的是,如果您只是在帧之间移动图形对象,则调用它们的 move() 方法而不是擦除并重新绘制它们。如果一定要清屏,那我建议:

在下降到 Tkinter 级别之前,我会考虑使用 Zelle Graphics 自己的基础。原因是 Zelle Graphics 保留它自己的对象并行记录,如果您从 Tkinter 级别删除它们,您可能会使两者不同步。这是我的建议:

def clear(win):
    for item in win.items[:]:
        item.undraw()
    win.update()

但是,取消绘制项目很慢,可能比您期望的帧速率慢。所以,您需要关闭自动刷新:

win = GraphWin(..., autoflush=False)

然后调用:

update()

每当您有东西要呈现给用户时 -- 这将加快图形速度,因为它不会显示所有中间步骤。

不过,上述建议 不适用于 使用 win.plot() 方法绘制的内容。绘图是在比其他 Zelle 图形更低的级别上实现的,因此您需要下拉到 Tkinter 来清除绘图。请参阅 如何使用 Zelle 图形取消绘图? 举个例子。