Python 3.x tkinter.ttk treeview似乎无法识别创建的列名

Python 3.x tkinter.ttk treeview似乎无法识别创建的列名,python-3.x,tkinter,treeview,ttk,Python 3.x,Tkinter,Treeview,Ttk,我在尝试使用ttk.Treeview显示文件中的数据时遇到了一个棘手的问题。我从未真正接触过工作的数据部分,因为我似乎无法设置Treeview结构 出于某些原因,我想从列名称列表中创建Treeview列,而这些列名称又是从保存结构信息的元组元组中获取的。如本测试程序所示,创建列似乎工作正常。但是,当我尝试为列创建标题时,会收到一条消息,说我分配的列名无法识别为标识符 尽管从文档中可以看出: 列标识符采用以下任一形式: “列列表”选项中的符号名称 整数n,指定第n个数据列 形式为#n的字符串,其

我在尝试使用ttk.Treeview显示文件中的数据时遇到了一个棘手的问题。我从未真正接触过工作的数据部分,因为我似乎无法设置Treeview结构

出于某些原因,我想从列名称列表中创建Treeview列,而这些列名称又是从保存结构信息的元组元组中获取的。如本测试程序所示,创建列似乎工作正常。但是,当我尝试为列创建标题时,会收到一条消息,说我分配的列名无法识别为标识符

尽管从文档中可以看出:

列标识符采用以下任一形式:

  • “列列表”选项中的符号名称
  • 整数n,指定第n个数据列
  • 形式为#n的字符串,其中n为整数,指定第n个显示列
我浏览了无数的示例、教程和参考页——这是一个基本的Treeview操作,但他们似乎都说我所做的应该是可行的。事实并非如此。怎么了

这是在linux系统中使用Python3.9.4,tkinter版本为8.6.10

下面是一个测试程序:

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])

fileDataTree.columns = column_list

fileDataTree.heading('#0',text='')

print("At line 38 fileDataTree columns are: {}".format(fileDataTree.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()

哪个输出:

At line 38 fileDataTree columns are: ['DateTime', 'Rate', 'Amp1', 'Amp2', 'Residual']
Traceback (most recent call last):
  File "/home/michael/src/tkinter/./demo_ttktree.py", line 41, in <module>
    fileDataTree.heading(item[0], text=item[0])
  File "/usr/lib64/python3.9/tkinter/ttk.py", line 1299, in heading
    return _val_or_dict(self.tk, kw, self._w, 'heading', column)
  File "/usr/lib64/python3.9/tkinter/ttk.py", line 298, in _val_or_dict
    res = tk.call(*(args + options))
_tkinter.TclError: Invalid column index DateTime

第38行的fileDataTree列为:['DateTime','Rate','Amp1','Amp2','残数']
回溯(最近一次呼叫最后一次):
文件“/home/michael/src/tkinter//demo_ttktree.py”,第41行,在
fileDataTree.heading(项[0],文本=项[0])
文件“/usr/lib64/python3.9/tkinter/ttk.py”,第1299行,标题
返回值或dict(self.tk,kw,self.\w,“标题”,列)
文件“/usr/lib64/python3.9/tkinter/ttk.py”,第298行,在
res=tk.call(*(参数+选项))
_tkinter.TclError:列索引DateTime无效

感谢您的帮助。

您没有设置
Treeview
columns
选项。您可以找到一个示例,说明如何使用列acw1668创建树视图——这不是通过以下行完成的:fileDataTree.columns=column\u listj\u 4321:是的,该示例与我所做的相同,除了它最初在创建treeview时声明列,而我是通过给treeview.columns分配一个列表来实现的。后者应该有效,不是吗?当我打印列的值时,它似乎是正确的。
fileDataTree.columns
是一个属性,而不是选项。改用
fileDataTree['columns']