Python Tkinter项目报错'DES' object has no attribute 'summary_output'求解
报错根因
- 第一个
AttributeError: 'DES' object has no attribute 'summary_output':summary_output控件是在DES.createFrame()方法中才初始化的,你在Set类里创建DES实例后,直接调用set_summary_text(),没有先执行createFrame(),导致属性不存在。 - 第二个
AttributeError: 'str' object has no attribute 'update_idletasks':DES继承了tk.Frame,但你没有调用父类Frame的初始化方法,且DES的__init__第一个参数你传的是摘要字符串,而Frame父类要求第一个参数必须是Tk窗口master对象,导致Frame内部的_master属性被覆盖为字符串,matplotlib渲染时调用窗口方法就会报错。
修复方案
- 调整DES类的入参和初始化逻辑,优先调用父类Frame的初始化方法,将控件初始化逻辑整合到构造方法中,避免漏调用
- 复用DES实例,不要每次上传CSV都重复创建窗口,减少渲染异常
- 确保matplotlib画布初始化时传入的master是合法的Tk对象,而非字符串
修正后的DES类代码
import tkinter as tk from tkinter import END, Frame class DES(Frame): # 调整入参顺序:第一个参数为父窗口master,第二个参数为可选的初始摘要 def __init__(self, master, summary=""): # 必须先调用父类Frame的初始化方法,否则Tk控件逻辑全部异常 super().__init__(master) self.summary = summary # 控件初始化直接放到构造方法中,避免漏调用createFrame self.createFrame() def createFrame(self): self.config(width=750, height=968, bg='white') self.summary_output = tk.Text( self, height=8, width=78, bg="gray95", borderwidth=2, relief="groove", font=("Arial", 12)) self.summary_output.configure(state='disabled') self.summary_output.place(x=20, y=610) # matplotlib画布初始化时,master参数传self即可正常渲染 # 示例:self.canvas = FigureCanvasTkAgg(fig, master=self) self.pack() def set_summary_text(self, new_summary=None): # 支持动态更新摘要内容 if new_summary is not None: self.summary = new_summary self.summary_output.configure(state='normal') self.summary_output.delete('1.0', END) self.summary_output.insert('end', self.summary) self.summary_output.configure(state='disabled')
修正后的Set类代码
# 全局保存DES实例,避免每次上传都重复创建窗口 des_instance = None class Set: def __init__ (self, summary): self.summary = summary def set_summary(self): global des_instance, root if des_instance is None: # 首次创建传入root作为父窗口 des_instance = DES(root, self.summary) else: # 后续直接更新摘要内容即可 des_instance.set_summary_text(self.summary)
修正后的入口方法
def main(): global root root = tk.Tk() # 初始化上传页面 upload_csv(root) root.mainloop() if __name__ == '__main__': main()
内容的提问来源于stack exchange,提问作者Testnominiee
相关产品推荐
相关产品推荐

