Python 3.x tkinter.ttk treeview似乎无法识别创建的列名
我在尝试使用ttk.Treeview显示文件中的数据时遇到了一个棘手的问题。我从未真正接触过工作的数据部分,因为我似乎无法设置Treeview结构 出于某些原因,我想从列名称列表中创建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的字符串,其
- “列列表”选项中的符号名称
- 整数n,指定第n个数据列
- 形式为#n的字符串,其中n为整数,指定第n个显示列
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']
。