我在一个大型程序中有以下几行。
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语句确认了这一点。
答案 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回调的更多信息