You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行Tkinter脚本出现AttributeError: 'Application'对象无'tk'属性求助

解决Tkinter中的AttributeError: 'Application' object has no attribute 'tk'错误

这个错误的核心原因是你的Application类继承了tk.Frame,但没有在构造函数中调用父类的初始化方法,导致Frame的必要属性(比如tk)没有被创建。除此之外,代码里还有几个小问题会导致按钮功能异常,我来帮你一一修正:

问题1:未调用父类构造函数

当你继承tk.Frame时,必须在子类的__init__方法中调用父类的__init__,否则Frame的初始化逻辑不会执行,也就无法生成tk这类必要属性。解决方法是在__init__开头添加:

super().__init__(master)

或者兼容旧版本Python的写法:

tk.Frame.__init__(self, master)

问题2:frame.pack缺少括号

frame.pack只是引用了这个方法对象,并没有执行它,必须加上括号frame.pack()才能把frame添加到窗口中。

问题3:按钮command参数错误

你写的command=self.Print()会在创建按钮时立即执行Print方法,而不是等到按钮被点击时触发。正确的写法是去掉括号,直接传入方法引用:command=self.Print。

另外,quit是主窗口root的方法,你的Application类并没有quit方法,所以command=self.quit()不仅会立即执行,还会引发另一个错误。应该改为command=self.master.quit,直接调用主窗口的退出方法。

修正后的完整代码

import tkinter as tk

class Application(tk.Frame):
    def __init__(self, master):
        # 调用父类Frame的构造函数,完成初始化
        super().__init__(master)
        self.master = master
        self.pack()  # 将Application自身作为主frame添加到窗口
        
        # 创建Print按钮,command传入方法引用
        self.PRINT = tk.Button(self, text='Print', fg='Red', command=self.Print)
        self.PRINT.pack(side='left')
        
        # 创建Quit按钮,调用主窗口的quit方法
        self.QUIT = tk.Button(self, text='Quit', fg='Red', command=self.master.quit)
        self.QUIT.pack(side='left')

    def Print(self):
        print('at least somethings working')

root = tk.Tk()
b = Application(root)
root.mainloop()

现在运行这段代码,窗口会正常显示,点击Print按钮会输出指定文本,点击Quit按钮可以正常关闭窗口,也不会再出现AttributeError了。

内容的提问来源于stack exchange,提问作者Jungar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:01:32