如何在Tkinter TreeView小部件中添加列?

时间:2017-03-31 13:46:57

标签: python tkinter treeview

我需要在创建Tkinter TreeView小部件后添加新列,但我找不到办法。我尝试使用configure方法修改树的columns属性,但这会重置除icon列之外的所有列。

我看到的唯一解决方案是将其配置为拥有尽可能多的列,并使它们全部不可见,以便在需要添加时可以使它们可见。还有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

新手在这里: 我和你有同样的问题。我解决了它如下。

提示:在您提供列名后,初始化Treeview'。在Treeview初始化完成后,我无法在Web上找到任何添加新列的解决方案。

实施例: - blah bhah code ---

def treecols(self,colnames=[],rowdata=[]):
    self.tree = ttk.Treeview ( self.frame1,columns=colnames )
    self.tree.grid ( )

    for eachcol in colnames:
        self.tree.heading(column=eachcol,text=eachcol)
        self.tree.column(column=eachcol,width=100,minwidth=0)

答案 1 :(得分:0)

所有的魔术都在add_columns方法中,其余的只是一个可行的示例。 我希望这能回答您的问题(有点晚了,但可能会对其他人有所帮助)。

import tkinter
import tkinter.ttk

class GUI():
    def __init__(self, master):
        self.view = tkinter.ttk.Treeview(master)
        self.view.pack()
        self.view.heading('#0', text='Name')
        
        self.view.insert('', 'end', text='Foo')
        self.view.insert('', 'end', text='Bar')
        self.view['columns'] = ('foo')
        self.view.heading('foo', text='foo')
        self.view.set(self.view.get_children()[0], 'foo', 'test')
        self.add_columns(('bar', 'blesh'))

    def add_columns(self, columns, **kwargs):
        # Preserve current column headers and their settings
        current_columns = list(self.view['columns'])
        current_columns = {key:self.view.heading(key) for key in current_columns}

        # Update with new columns
        self.view['columns'] = list(current_columns.keys()) + list(columns)
        for key in columns:
            self.view.heading(key, text=key, **kwargs)

        # Set saved column values for the already existing columns
        for key in current_columns:
            # State is not valid to set with heading
            state = current_columns[key].pop('state')
            self.view.heading(key, **current_columns[key])
            

tk = tkinter.Tk()
GUI(tk)
tk.mainloop()