【发布时间】:2017-12-17 04:34:56
【问题描述】:
TKinter 'after' 方法立即执行,然后在执行后暂停 3 秒。如果我还在 CheckStatus 函数中使用 'after' 方法,它会进入快速循环,永远不会进入 mainloop()。
我做错了什么?文档说该函数将在暂停时间之后被调用,但它实际上发生在之前。我想每秒调用一次 CheckStatus 以获取 Raspberry Pi 上的硬件输入,并让正常的主循环响应用户事件。
from tkinter import *
def DoClick(entries):
global ButCount
ButCount += 1
print("ButCount", ButCount, "TimeCount", TimeCount)
def newform(root):
L1 = Label(root, text = "test of 'after' method which seems to call before time")
L1.pack()
def CheckStatus():
global TimeCount
TimeCount += 1
print("In CheckStatus. ButCount", ButCount, "TimeCount", TimeCount)
# root.after(3000, DoTime())
root = Tk()
ButCount = 0
TimeCount = 0
if __name__ == '__main__':
FormData = newform(root)
root.bind('<Return>', (lambda event, e=FormData: fetch(e)))
b1 = Button(root, text='Click me', command=(lambda e=FormData: DoClick(e)))
b1.pack()
print("Before root.after(")
root.after(3000, CheckStatus())
print("Done root.after(")
root.mainloop()
【问题讨论】:
-
after()likecomman=和bind()需要callback- 这意味着没有()的函数名称 - 在你的代码中root.after(3000, CheckStatus)没有()