Tkinter的mainloop()自动调用按钮函数

0 投票
2 回答
1937 浏览
提问于 2025-04-17 09:17

我刚开始接触Tkinter,想在我的脚本里做一些更复杂的图形界面。这个问题应该很基础,但我就是搞不清楚哪里出错了。

我想做的事情很简单,就是有一些数据输入的选项,底部有退出和提交的按钮。不过,似乎是mainloop()或者其他什么东西在没有用户输入的情况下就一直在运行按钮的命令。这样一来,因为退出按钮的原因,应用程序在显示之前就被关闭了。如果我把按钮放在mainloop()外面,就没有问题了,但这样当然不合理,而且按钮也不会显示出来。

button_exit = Tkinter.Button(root, text = 'Exit', command = root.destroy())
button_exit.grid(row=3, column=0, pady=10, sticky='E')
button_query = Tkinter.Button(root, text = 'Query', command = intQuery())
button_query.grid(row=3, column=1, padx=10, sticky='E')

root.mainloop()

这基本上就是代码出问题的地方。其他的部分只是一些数据输入框,大部分脚本还没写呢。

提前谢谢你。

2 个回答

0

你也可以试试 command=lambda: root.destroy() 这个例子。

更新:刚注意到,这个问题是11年前问的……

3

command = root.destroy()

改成

command = root.destroy

原因是这样的:括号会调用这个方法,而方法的参数在被传递给方法之前会先被计算。这就是为什么你的程序会提前退出的原因。

如果没有括号,你就是在引用这个方法作为一个对象,这个对象可以传给Tkinter.Button,存储起来,等到按钮被按下时再调用。

然后对command = intQuery()也做同样的处理。

撰写回答