2011-12-31 94 views
4

我试图制作一个程序,它使用sqlite3从数据库中检索记录,然后使用Treeview显示它们。删除Treeview对象的空第一列

我成功地创建了一个用记录创建的表,但我无法删除第一个空列。

def executethiscommand(search_str): 
    comm.execute(search_str) 
    records = comm.fetchall() 
    rows = records.__len__() 
    columns = records[0].__len__() 

    win = Toplevel() 
    list_columns = [columnames[0] for columnames in comm.description] 
    tree = ttk.Treeview(win) 
    tree['columns'] = list_columns 

    for column in list_columns: 
     tree.column(column, width=70) 
     tree.heading(column, text=column.capitalize()) 

    for record in records: 
     tree.insert("", 0, text="", values=record) 

    tree.pack(side=TOP, fill=X) 

enter image description here

回答

1

也许你要使用像一个TkTable比一个TreeView更好。
在TreeView中,第一列被定义为给每行描述的对象一个名称或id。从docs

上的树形视图控件可以显示和允许通过项目分层结构 浏览,并能 显示每个项目的一个或多个属性为列树的右侧。

您填写与第一列:

tree.insert('', insert_mode, text='name first col') 

如果你仍然想使用第一列作为一个正常的列,您可以尝试:

tree['columns'] = list_columns[1:] 
for record in records: 
    tree.insert("", 0, text=record[0], values=record[1:]) 

但是我不知道如何或即使可以在TreeView中填充第一列的标题也是如此。

+0

谢谢joaquin,但你能告诉我如何分配空列的名字吗?感谢您的帮助:) – 2011-12-31 16:42:58

17

第一个空列是项目的标识符,您可以通过设置show参数来抑制该列。

t = ttk.Treeview(w) 
t['show'] = 'headings' 

这将消除该空列。

2

有点晚和哈克但你也可以做的是:

tree.column("#0", width=0) 

“#0”是第一列的标识符,这样的宽度设置为0,在技术上把它隐藏

+2

这不起作用,至少对我而言。它仍然显示一个空的小列,就好像该命令隐含的最小宽度一样。 – pagliuca 2015-12-10 15:24:28

+2

对,这不起作用,但是添加minwidth = 0解决了默认最小宽度的问题。 – 2017-01-23 21:56:30