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