这些线有什么问题?

时间:2017-02-21 11:08:24

标签: python user-interface button login tkinter

我在一个大型程序中有以下几行。

output = []
counter = 1
last_category = ''
for res in results:
    category = res[0]
    if category != last_category: counter = 1
    if category == last_category:
        if counter <= 3:
            output.append(res)
            counter +=1

        last_category = category

当程序运行时,函数username = Entry(loginPage) password = Entry(loginPage) button1 = Button(loginPage,text = "Login", fg = "red", command = loginClicked(username.get(),password.get())) 在开始时运行一次(当字段为空且没有单击按钮时),这是它运行的唯一时间。之后,当单击该按钮时,该功能根本不运行。函数中的print语句确认了这一点。

1 个答案:

答案 0 :(得分:0)

正如评论中所提到的,当您创建窗口小部件时,您在创建窗口小部件之前调用(&#39;运行&#39;)函数,而不是将函数句柄(此处可能是错误的术语)传递给小部件选项command=

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

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

这会造成一次“扔掉”&#39;函数提供给Tkinter的回调函数,该函数用正确的参数调用函数loginClicked()

您还可以阅读effbot.org以获取有关Tkinter回调的更多信息