首页 > 解决方案 > 用 Tkinter 等待一定的时间

问题描述

我有一个 Tkinter 程序,我想暂停 3 秒钟。 time.sleep不起作用,并且该after方法不完全符合我的要求。

这是一个示例代码:

from Tkinter import *
def waithere():
    print "waiting..."
root = Tk()

print "1"
root.after(3000,waithere)
print "2"

root.mainloop()

输出:

1
2
*3 seconds*
waiting...

我想要的输出:

1
waiting...
*3 seconds*
2

谢谢。

标签: pythonpython-2.7tkinter

解决方案


通常,让 GUI 等待某些东西是一个非常糟糕的主意。这并不意味着基于事件的程序是如何工作的。或者更准确地说,GUI 已经处于永久等待状态,您不想用自己的等待来阻止它。

话虽如此,tkinter 有办法等到某些事情发生。例如,您可以使用“等待”函数之一,例如wait_variablewait_windowwait_visibility

假设您想waithere进行等待,您可以使用wait_variable进行等待,并after在给定时间后设置变量。

这是基于您的原始代码的解决方案:

from Tkinter import *
def waithere():
    var = IntVar()
    root.after(3000, var.set, 1)
    print("waiting...")
    root.wait_variable(var)

root = Tk()

print "1"
waithere()
print "2"

root.mainloop()

使用这些方法的好处是您的代码在等待时仍然能够响应事件。


推荐阅读