我想在Treeview中添加三列,并将其命名为“ Varenavn”,“ Antall”,“ Bestfør”。我尝试了以下方法:
self.tree = ttk.Treeview (height = 10, columns = 3)
self.tree.grid (row = 4, column = 0, columnspan = 2)
self.tree.heading ('#0', text = 'Varenavn', anchor = W)
self.tree.heading ('#1', text = 'Antall', anchor = W)
self.tree.heading ('#2', text = 'Best før', anchor = W)
但是我得到了:
_tkinter.TclError: Column #2 out of range.
如果我将代码的最后一位更改为:
self.tree.heading ('#1', text = 'Best før', anchor = W)
代码运行正常,但是在第二列中将'Antall'
覆盖了'Best før'
。
任何想法将不胜感激!
答案 0 :(得分:2)
您为columns=
参数提供的值没有达到您期望的值。
来自New Mexico Tech Tkinter reference:
列
列标识符字符串的序列。这些字符串在内部用于标识小部件内的列。图标列(其标识符始终为
'#0'
)包含折叠/展开图标,并且始终是第一列。使用columns参数指定的列是对icon列的补充。
例如,如果您指定
>columns=('Name', 'Size')
,则小组件中将显示三列:首先是图标列,然后是另外两个内部标识符分别为'Name'
和'Size'
的列。
因此,您应该给它一个想要创建的列的名称的元组,而不是一个数字,并且应该给它一个比所需的列总数少的名称,因为第一列始终为'#0'
为解释您得到的错误,使用columns = 3
时的结果与使用columns = ('3')
时的结果相同;您实际上仅在'#0'
列旁边创建一列,该列可由'#1'
或'3'
标识。当您尝试访问列'#2'
时,会出现超出范围的错误,因为只有两列。
答案 1 :(得分:2)
使用 for 循环:
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
tree = ttk.Treeview(root,columns=())
tree.pack(fill='x')
for i in range(5):
param = tree['columns']+(f'#{i+1}',)
tree.configure(columns=param)
for i in range(5):
tree.heading(column=f'#{i+1}',text=f'text{i+1}',anchor='w')
tree.column(column=f'#{i+1}', width=150,minwidth=50,stretch=False)
root.mainloop()
使用列表:
import tkinter as tk
from tkinter import ttk
cols = ['one','two','three','four','five']
root = tk.Tk()
tree = ttk.Treeview(root,columns=cols)
tree.pack(fill='x')
for i in cols:
tree.heading(column=f'{i}',text=f'{i}',anchor='w')
tree.column(column=f'{i}', width=150,minwidth=50,stretch=False)
root.mainloop()
手动:
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
tree = ttk.Treeview(root,columns=('one','two','three','four','five'))
tree.pack(fill='x')
for i in tree['columns']:
tree.heading(column=f'{i}',text=f'{i}',anchor='w')
tree.column(column=f'{i}', width=150,minwidth=50,stretch=False)
root.mainloop()
通用:
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
tree = ttk.Treeview(root,columns=tuple(f"{i}" for i in range(5)))
tree.pack(fill='x')
for i in tree['columns']:
tree.heading(column=f'{i}',text=f'{i}',anchor='w')
tree.column(column=f'{i}', width=150,minwidth=50,stretch=False)
root.mainloop()
答案 2 :(得分:0)
例如,您需要指定
Long
及以后
self.tablex=ttk.Treeview(heigh=10,columns=("#0","#1","#2","#3"))