方法执行后立即执行Tkinter

时间:2017-12-17 04:34:57

标签: python tkinter

TKinter'之后'方法立即执行,然后在执行后暂停3秒。如果我也使用'之后'在我的CheckStatus函数中,它进入快速循环并且永远不会到达mainloop()。

我做错了什么?文档说这个函数会在暂停时间之后被调用,但它实际上是在之前发生的。我想每秒调用CheckStatus来获取Raspberry Pi上的硬件输入,并让普通的mainloop响应用户事件。

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()

2 个答案:

答案 0 :(得分:3)

你错误地使用了。考虑这行代码:

root.after(3000, CheckStatus())

与此完全相同:

result = CheckStatus()
root.after(3000, result)

看到问题?之后需要一个可调用的 - 对函数的引用。

解决方案是将引用传递给函数:

root.after(3000, CheckStatus)

答案 1 :(得分:1)

您的代码中有一个错误:

@IBDesignable class CTextField: UIView, UITextFieldDelegate {
    var textField: UITextField?
    var label: UILabel?

    @IBInspectable var placeHolderText: String = "" {
        didSet {
           textField?.placeholder = placeHolderText
        }
     }

     override func awakeFromNib() {
          textField =  UITextField(frame: CGRect(x: 20, y: 100, width: 300, height: 40))
          textField?.placeholder = placeHolderText

          self.addSubview(textField!)
     }}

需要:

root.after(3000, CheckStatus())

传入root.after(3000, CheckStatus) # ^^ parens removed. 实际上调用了func而不是传入它的引用。

听起来你也想要一遍又一遍地调用CheckStatus。您可以在CheckStatus中使用递归调用来完成此操作。你已经有了:

CheckStatus()
代码中的

# root.after(3000, DoTime()) 。也许你想将其改为:

CheckStatus()

让你进行异步检查。

此外,根据您实际尝试做的事情,您可能希望&#34;递归&#34;呼吁有条件。