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

Tkinter Treeview字段映射错误求助:数据显示错位

修复Tkinter Treeview数据映射错误的方案

问题根源分析

你的数据映射错误主要来自两个核心问题:

  1. Treeview展示时,数据库查询的字段顺序与列的预期不匹配,导致Allowed列显示dayoper(对应数据库的day_of_oper字段)、Estimated ($)列显示weight字段。
  2. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 10:44:53