我需要在创建Tkinter TreeView小部件后添加新列,但我找不到办法。我尝试使用configure
方法修改树的columns属性,但这会重置除icon列之外的所有列。
我看到的唯一解决方案是将其配置为拥有尽可能多的列,并使它们全部不可见,以便在需要添加时可以使它们可见。还有更好的方法吗?
答案 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()