2017-02-21 57 views
-2

我在一个大程序中有以下几行。这些行有什么问题?

username = Entry(loginPage) 
password = Entry(loginPage) 

button1 = Button(loginPage,text = "Login", fg = "red", command = loginClicked(username.get(),password.get())) 

当运行程序,功能loginClicked运行一次在启动(当字段为空和按钮没有被点击),这是它运行的唯一时间。之后,当按钮被点击时,该功能根本不运行。函数中的打印语句证实了这一点。

回答

0

正如在注释中提到的那样,当创建窗口小部件时,在创建窗口部件之前调用('运行')该函数,而不是将函数句柄(此处可能是错误的术语)传递给窗口小部件选项command=

这可以通过使用匿名函数与lambda解决:

button1 = Button(root,text = "Login", 
       fg = "red", 
       command = lambda: loginClicked(username.get(), password.get())) 

这将创建一个“被扔掉”功能,以馈入Tkinter的回调,这与其正确的参数调用你的函数loginClicked()

您也可以阅读effbot.org了解更多关于Tkinter回调的信息