Tkinter格式化编写代码触发Header无tk属性的AttributeError是什么原因
问题原因
- 错误出在
Header类的初始化方法中,你没有正确调用父类tk.Frame的构造函数:当前写的tk.Frame(parent, height=50, bg="#000000")只是创建了一个独立的临时Frame对象,没有将父类的属性和方法绑定到你自己的Header实例上,导致Header实例缺少tkinter控件必需的tk属性,调用pack方法时就触发了属性缺失报错。
修复方法
将Header类的初始化逻辑修改为正确调用父类构造函数即可,两种写法都可以:
- 写法1(推荐super写法,适配后续继承变更):
class Header(tk.Frame): def __init__(self, parent): super().__init__(parent, height=50, bg="#000000")
- 写法2(显式调用父类构造,和你
MainApplication里的写法统一):
class Header(tk.Frame): def __init__(self, parent): tk.Frame.__init__(self, parent, height=50, bg="#000000")
修正后完整可运行代码
import tkinter as tk class MainApplication(tk.Frame): def __init__(self, parent, *args, **kwargs): tk.Frame.__init__(self, parent, *args, **kwargs) self.parent = parent # Set start-up screen width and height screen_width = self.parent.winfo_screenwidth() screen_height = self.parent.winfo_screenheight() self.parent.geometry(f"{screen_width}x{screen_height}") # Adding Header self.header = Header(self) self.header.pack(side="top", fill="x") class Header(tk.Frame): def __init__(self, parent): # 正确调用父类构造,绑定属性到当前实例 tk.Frame.__init__(self, parent, height=50, bg="#000000") if __name__ == "__main__": root = tk.Tk() MainApplication(root).pack(side="top", fill="both", expand=True) root.mainloop()
内容的提问来源于stack exchange,提问作者vexem
相关产品推荐
相关产品推荐

