Tkinter Treeview字段映射错误求助:数据显示错位
修复Tkinter Treeview数据映射错误的方案
问题根源分析
你的数据映射错误主要来自两个核心问题:
- Treeview展示时,数据库查询的字段顺序与列的预期不匹配,导致Allowed列显示
dayoper(对应数据库的day_of_oper字段)、Estimated ($)列显示weight字段。 OnDoubleClick函数存在变量引用错误,使用了不存在的col12、col15变量。
具体修复步骤
1. 修正select_lista函数的查询字段顺序
你未提供select_lista代码,但根据现象,它查询数据库时返回的字段顺序错误。需修改SQL查询,确保返回字段与Treeview列一一对应:
def select_lista(self): # 清空Treeview现有数据 for item in self.listacli.get_children(): self.listacli.delete(item) self.conecta_bd() # 按Treeview列顺序查询对应字段:vessel, comm, allowed, estimated self.cursor.execute("""SELECT vessel, comm, allowed, estimated FROM laytime""") dados = self.cursor.fetchall() for linha in dados: # 将查询结果插入Treeview,顺序匹配Vessel、Commodity、Allowed、Estimated列 self.listacli.insert("", END, values=linha) self.desconecta_bd()
2. 修正OnDoubleClick函数的变量引用错误
Treeview的values仅包含4个字段,需调整解包变量并正确引用对应列的值:
def OnDoubleClick(self, event): self.limpar_tela() for n in self.listacli.selection(): # 解包Treeview的4个值:vessel, comm, allowed, estimated col1, col2, col3, col4 = self.listacli.item(n, 'values') self.vessel_entry.insert(END, col1) self.comm_entry.insert(END, col2) self.allowed_value.insert(END, col3) # 对应Allowed列的数据 self.estimated_value.insert(END, col4) # 对应Estimated ($)列的数据
3. (可选)优化Treeview列名可读性
当前列名col1、col12等易混淆,建议改为直观命名:
def lista_frame2(self): self.listacli = ttk.Treeview(self.frame_2, height=3, column=("vessel", "commodity", "allowed", "estimated")) self.listacli.heading("#0", text="") self.listacli.heading("vessel", text="Vessel") self.listacli.heading("commodity", text="Commodity") self.listacli.heading("allowed", text="Allowed") self.listacli.heading("estimated", text="Estimated ($)") self.listacli.column("#0", width=1) self.listacli.column("vessel", width=50) self.listacli.column("commodity", width=200) self.listacli.column("allowed", width=125) self.listacli.column("estimated", width=125) self.listacli.place(relx=0.01, rely=0.1, relwidth=0.95, relheight=0.85)
内容的提问来源于stack exchange,提问作者Jackeline
相关产品推荐
相关产品推荐

