Tkinter-将多个列添加到树视图

时间:2018-08-08 12:12:56

标签: python tkinter treeview

我想在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'

任何想法将不胜感激!

3 个答案:

答案 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"))