Python tkinter中是否有button.config()等文本或模式的即时更新功能?

Python tkinter中是否有button.config()等文本或模式的即时更新功能?,python,tkinter,Python,Tkinter,我写了一个“地雷”游戏的修改程序,我希望它能以图形方式显示每一步/点击。我使用time.sleep(0.5)来暂停。因此,总的来说,主程序如下所示: 检查块() 而(一): 但是,按钮不会每0.5秒更新一次:当游戏(循环)结束时,它们都会一起更新 我想这就像C++中的“cout”:如果你不刷新它们,它们会堆积起来。那么,有没有一种方法可以让他们一步一步地更新,或者说,立即更新? 谢谢 在所有GUI系统中,您必须允许消息循环运行,以便窗口事件迅速发生。所以不要像这样使用while循环。相反,创建一

我写了一个“地雷”游戏的修改程序,我希望它能以图形方式显示每一步/点击。我使用
time.sleep(0.5)
来暂停。因此,总的来说,主程序如下所示:

检查块()

而(一):

但是,按钮不会每0.5秒更新一次:当
游戏(循环)
结束时,它们都会一起更新

我想这就像C++中的“cout”:如果你不刷新它们,它们会堆积起来。那么,有没有一种方法可以让他们一步一步地更新,或者说,立即更新?
谢谢

在所有GUI系统中,您必须允许消息循环运行,以便窗口事件迅速发生。所以不要像这样使用while循环。相反,创建一个调用check_block()和get_next()的方法,并在延迟后使用
after
调用该函数。在该函数结束时,再次使用
after
再次调用同一函数,以便该函数永远每隔0.5秒调用一次。after函数对计时器事件进行排队,然后允许处理消息队列。一旦计时器事件触发,回调函数将运行,从而允许您执行操作并保持UI响应。

在GUI程序中不应调用sleep。这是因为GUI必须始终处于“唤醒”状态,以便为事件(包括导致屏幕更新的内部事件)提供服务。相反,利用已经运行的eventloop,使用
after
方法定期将事件放入队列

在您的情况下,您可以将while循环替换为以下内容:

def do_check():
    check_block()
    if not check_fail():
        root.after(500, do_check)

# in your initialization code, start the loop by calling it directly:
do_check()
我不知道你的
get\u next
函数做什么,所以我不知道你是否也需要定期调用它。可能不会。我猜它会等待下一次按钮按下,而tkinter或大多数其他GUI工具包都不需要这样做。相反,您可以将按钮配置为在单击时调用函数

无论如何,执行您想要的循环类型的方法是以固定的间隔在事件队列上放置事件

time.sleep(0.5)
check_block()
get_next()
if check_fail():
     break
def do_check():
    check_block()
    if not check_fail():
        root.after(500, do_check)

# in your initialization code, start the loop by calling it directly:
do_check()