首页 > 解决方案 > tkinter.ttk treeview 似乎无法将列名识别为已创建

问题描述

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

出于某些原因,我想从列名列表中创建 Treeview 列,而这些列名又是从包含结构信息的元组中获得的。如该测试程序所示,创建列似乎工作正常。但是当我尝试为列创建标题时,我收到一条消息,指出我分配的列名未被识别为标识符。

尽管如此,文档中还是这样:

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

  • 列选项列表中的符号名称。
  • 整数 n,指定第 n 个数据列。
  • #n 形式的字符串,其中 n 是整数,指定第 n 个显示列。

我在这方面浏览了无数示例、教程和参考页面——这是一个基本的 Treeview 操作,但他们似乎都说我正在做的事情应该有效。它不是。怎么了?

这是在 linux 系统中使用 python 3.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

任何帮助表示赞赏。

标签: python-3.xtkintertreeviewttk

解决方案


推荐阅读