如何修复Tkinter Treeview显示Pandas DataFrame数据时的属性错误?
修复Tkinter Treeview展示Pandas DataFrame时的AttributeError错误
问题根源
报错的核心原因是这行代码的写法错误:
df_tree=ttk.Treeview(mywin,columns=df_list).pack()
pack()方法的返回值是None,因此df_tree实际被赋值为None,后续调用df_tree.column()时自然会抛出NoneType对象没有column属性的错误。另外原代码还缺少Tk类的导入,运行时会额外触发NameError。
修复方案
- 拆分Treeview对象的创建与布局语句:先创建Treeview实例,再单独调用
pack(),确保df_tree保留对Treeview对象的引用 - 补充
Tk类的导入
修复后的完整代码
import pandas as pd from tkinter import Tk, ttk # 补充导入Tk类 mywin = Tk() mywin.geometry('300x300') df = pd.read_csv('<filepath of csv file>') df_list = list(df.columns.values) df_rset = df.to_numpy().tolist() # 拆分创建和布局操作,保留Treeview实例引用 df_tree = ttk.Treeview(mywin, columns=df_list) df_tree.pack() for i in df_list: df_tree.column(i, width=100, anchor='c') df_tree.heading(i, text=i) for dt in df_rset: v = [r for r in dt] df_tree.insert('', 'end', iid=v[0], values=v) mywin.mainloop()
额外注意事项
如果你的DataFrame第一列存在重复值,使用iid=v[0]会触发Treeview的iid唯一性错误,此时可以改用循环索引作为iid:
for idx, dt in enumerate(df_rset): v = [r for r in dt] df_tree.insert('', 'end', iid=idx, values=v)
内容的提问来源于stack exchange,提问作者Amitoj
相关产品推荐
相关产品推荐

