You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tkinter Treeview多余列及SQLite数据对齐问题求助

Tkinter Treeview 列显示与SQLite数据对齐问题解决

问题描述

我正在学习Tkinter,开发一款客户信息管理的SQLite小型数据库应用,遇到两个问题:

  1. Treeview出现多余列,无法只显示指定的4列(Código、Nome、Telefone、Cidade)
  2. 从SQLite取出的信息显示在Treeview时,数据无法在对应列正确对齐

已尝试调整列宽、设置anchor=CENTER、检查数据中的多余空格或字符,问题仍存在。相关代码如下:

def lista_frame2(self):
    self.listaCli = ttk.Treeview(self.frame_2, height=3, columns=("col0", "col1", "col2", "col3"))
    self.listaCli.heading("#0", text="Código", anchor=CENTER)
    self.listaCli.heading("col1", text="Nome", anchor=CENTER)
    self.listaCli.heading("col2", text="Telefone", anchor=CENTER)
    self.listaCli.heading("col3", text="Cidade", anchor=CENTER)

    self.listaCli.column("#0", width=50, anchor=CENTER)
    self.listaCli.column("col1", width=50, anchor=CENTER)
    self.listaCli.column("col2", width=50, anchor=CENTER)
    self.listaCli.column("col3", width=60, anchor=CENTER)

    self.listaCli.place(relx= 0.025, rely= 0.05, relwidth= 0.92, relheight= 0.90)
    
    self.scrollLista = Scrollbar(self.frame_2, orient = 'vertical')
    self.listaCli.configure(yscroll=self.scrollLista.set)
    self.scrollLista.place(relx= 0.945, rely= 0.05, relwidth= 0.03, relheight= 0.90)
    self.listaCli.bind("<Double-1>", self.OnDoubleClick)

问题1:Treeview多余列的解决方法

Treeview的columns参数定义的是除默认#0列之外的额外列。你当前设置columns=("col0", "col1", "col2", "col3"),相当于在#0列之外新增4列(对应#1到#4),但只给#0、col1、col2、col3设置了标题,col0对应的#1列无标题,因此显示为空白多余列。

修正操作:
将columns参数改为("col1", "col2", "col3"),这样额外列仅3个,加上默认的#0列,正好对应你需要的4列:

self.listaCli = ttk.Treeview(self.frame_2, height=3, columns=("col1", "col2", "col3"))

问题2:SQLite数据与Treeview列对齐的解决方法

数据错位通常是因为插入Treeview的顺序与列定义不匹配,或是SQL查询返回的字段顺序和列对应不上,具体检查和修正如下:

  • 插入顺序匹配:插入Treeview时,text对应#0列(Código),values的元素需依次对应col1(Nome)、col2(Telefone)、col3(Cidade),例如:
    for row in cursor.fetchall():
        codigo, nome, telefone, cidade = row
        self.listaCli.insert("", END, text=codigo, values=(nome, telefone, cidade))
    
  • SQL查询字段顺序:从SQLite取数时,确保SELECT的字段顺序为codigo, nome, telefone, cidade,保证返回的元组顺序与列对应。
  • 清理不可见字符:若数据存在换行符、制表符等不可见字符,插入前用strip()处理:
    values=(nome.strip(), telefone.strip(), cidade.strip())
    

验证步骤

  1. 修改columns参数后重启程序,确认多余列消失
  2. 核对SQL查询和Treeview插入的字段顺序,确保一一对应
  3. 测试数据插入后的对齐效果

内容的提问来源于stack exchange,提问作者dugalvao01

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 22:37:42