2

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

4

1 回答 1

3

首先要考虑的是,如果您只是在帧之间移动图形对象,那么调用它们的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 图形取消绘图? 例如。

于 2017-08-05T22:27:32.473 回答