我写了一个“地雷”游戏的修改程序,我希望它能以图形化的方式显示每一步/点击。我用time.sleep(0.5)
来停顿一下。一般来说,主程序如下:
check_block():
if mine == 0: buttons[current].config(image = tile_clicked) elif mine == 1: buttons[current].config(image = tile[1]) ...
while(1):
time.sleep(0.5) check_block() get_next() if check_fail(): break
但是,按钮并不是每0.5秒更新一次:当game(loop)
结束时,它们都会一起更新。你知道吗
在所有GUI系统中,您必须允许消息循环运行,以便窗口事件迅速发生。所以不要像这样使用while循环。相反,创建一个调用check\u block()和get\u next()的方法,并在延迟后使用
after
调用该函数。在该函数结束时,再次使用after
来再次调用同一个函数,因此该函数永远每隔0.5秒调用一次。after函数将计时器事件排队,然后允许处理消息队列。一旦计时器事件触发,回调函数就会运行,它允许您执行操作并保持UI响应。你知道吗决不应该在GUI程序中调用sleep。这是因为GUI必须始终处于“唤醒”状态,以便为事件(包括导致屏幕更新的内部事件)提供服务。相反,利用已经运行的eventloop,使用
after
方法定期将事件放入队列。你知道吗在您的例子中,您可以用以下内容替换while循环:
我不知道你的
get_next
函数做什么,所以我不知道你是否需要定期调用它。可能不会。我猜它会等待下一次按下按钮,而tkinter或大多数其他GUI工具包都不需要这样做。相反,您可以将按钮配置为在单击时调用函数。你知道吗不管怎样,执行所需循环类型的方法是以固定的间隔将事件放置在事件队列中。你知道吗
相关问题 更多 >
编程相关推荐