删除Treeview对象的空首列

14 投票
5 回答
20921 浏览
提问于 2025-04-17 09:19

我正在尝试制作一个程序,使用 sqlite3 从数据库中获取记录,然后通过 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

5 个回答

2

可能你想用类似于TkTable的东西,而不是使用TreeView。
在TreeView中,第一列是用来给每一行描述的对象起名字或者标识符的。从文档中可以了解到:

树形视图组件可以显示并允许浏览一系列的项目,并且可以在树的右侧显示每个项目的一个或多个属性作为列。

你可以在第一列填入:

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中为这一列的标题填充内容,甚至不知道是否有这个可能。

10

虽然有点晚了,而且方法也不太正规,但你还可以这样做:

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

别忘了把最小宽度也设置为零,可以用这个命令;

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

这里的'#0'是第一列的标识符,所以把宽度设置为0实际上就是把它隐藏起来了。

38

第一个空列是用来标识这个项目的,你可以通过设置显示参数来隐藏它。

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

这样就可以去掉那个空列了。

撰写回答