Python ttk.Treeview设置自定义列名后提示无效列索引错误如何解决?
问题原因
你设置Treeview列的方式错误:直接对fileDataTree.columns赋值属于无效操作,这只是给Python侧的Treeview实例新增了一个自定义同名属性,并没有触发底层Tkinter的配置逻辑,Treeview没有真正创建你指定的列,后续调用heading()方法时自然无法识别你传入的列名。
官方文档提到的「columns配置项列表中的符号名称」,指的是通过正规配置接口传给Treeview的columns参数值,你自己给实例加的columns属性不会被底层识别。
修复方法
将你代码中fileDataTree.columns = column_list这一行,替换为调用configure方法配置columns参数即可:
fileDataTree.configure(columns=column_list)
另外补充:你设置了show='headings',代表不显示Treeview默认的#0图标列,所以fileDataTree.heading('#0',text='')这行代码是多余的,可以直接删除。
修正后完整可运行代码
from tkinter import * from tkinter import ttk as ttk # list of data fields and column widths field_reference = (('DateTime', 20), ('Rate',10), ('Amp1',15), ('Amp2',15), ('Residual',20)) #create a tkinter app app = Tk() app.title("Treeview Demo") app.geometry('700x400+100+100') app.columnconfigure(0, weight=1) app.rowconfigure(0, weight=1) # create a frame holding a treeview fileDataFrame = ttk.Frame(app, padding="3 3 12 12") fileDataFrame.grid(column=0, row=0, sticky=(N, W, E, S)) fDF_Title = ttk.Label(fileDataFrame, text="Data") fDF_Title.grid(column=0, row=0, sticky=(W, N)) # set up treeview for the data tree fileDataTree = ttk.Treeview(fileDataFrame, show='headings') # specify a column for each of the fields in the data file column_list=[] for item in field_reference: column_list.append(item[0]) # 修正:用configure方法设置列 fileDataTree.configure(columns=column_list) print("At line 38 fileDataTree columns are: {}".format(fileDataTree.cget("columns"))) for item in field_reference: fileDataTree.heading(item[0], text=item[0]) fileDataTree.column(item[0], width=item[1]) fileDataTree.grid(column=0, row=1, sticky='W,N') app.mainloop()
内容的提问来源于stack exchange,提问作者maab
相关产品推荐
相关产品推荐

