Python Tkinter类中实现退出按钮命令的问题求助
解决Tkinter类中添加退出按钮的问题
我来帮你搞定这个退出按钮的问题!咱们先理清楚你之前代码里的问题,再给你靠谱的实现方案。
你之前遇到的两个核心问题分析
第一个错误:直接执行函数作为command参数
你尝试用command = self.close_root(root)时,程序会立刻运行close_root函数,而不是等按钮点击时才触发。这是因为command需要的是一个可调用的函数名,而不是函数执行后的结果,加括号就会直接调用函数了。第二个错误:错误调用destroy方法
改成self.destroy()时出错,是因为self是你的ClassName类实例,并不是Tkinter的窗口对象(也就是root)。你已经在__init__里把窗口对象存成了self.root,所以必须调用self.root.destroy()才行。
正确的实现代码
下面是修正后的完整代码,关键细节我都标出来了:
from tkinter import Tk, Button # 记得导入需要的Tkinter组件 class ClassName(): def __init__(self, root): self.root = root # 把窗口对象保存到类的实例属性中 self.addExitButton() # 可以在这里直接初始化按钮,也可以在外部调用 def close_root(self): # 销毁窗口后,主循环通常会自动终止,quit可确保彻底结束(可选) self.root.destroy() self.root.quit() def addExitButton(self): # 直接用self.root作为父组件,command绑定函数名(不要加括号!) Button( self.root, text='Exit', width=10, command=self.close_root ).grid(row=5, column=0) # 测试运行代码 if __name__ == "__main__": root = Tk() app = ClassName(root) root.mainloop()
关键要点总结
- 不需要在
close_root和addExitButton里重复传递root参数,__init__里已经把窗口对象存为self.root,直接用这个属性即可。 command参数只需要写函数名(self.close_root),绝对不能加括号,否则会在按钮创建时就执行函数。- 操作窗口的方法(比如
destroy、quit)必须调用self.root的方法,而不是类实例self的方法。
内容的提问来源于stack exchange,提问作者Brandon Molyneaux
相关产品推荐
相关产品推荐

