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

PyQt5点击Add按钮仅插入空行 表格无法正常添加数据问题排查

问题原因排查

核心问题出在add_entry函数中QTableWidgetItem的构造逻辑上,异常处理吞掉了报错信息导致无法快速定位问题:

  • 构造QTableWidgetItem时直接传入数值类型(int、float)不符合API要求:QTableWidgetItem没有接收数值作为显示内容的构造方法,传入int值会被识别为「item类型标识」参数,不会作为文本展示;传入float值无匹配的构造方法,直接触发类型错误,被代码里的try-except捕获后静默跳过,仅执行了部分逻辑,单元格内容未成功设置。
  • 补充:代码中仅绑定了输入框的文本变化信号到check_disable槽函数,但未实现该函数,运行时会触发未定义方法的警告,也会导致Add按钮无法正常启用。
修复方案

修改add_entry函数内的QTableWidgetItem构造逻辑,先把数值转成字符串传入,再通过setData方法存储原始数值方便后续取用,同时补充check_disable函数实现:

# 补充缺失的check_disable函数,放在MyApp类中
def check_disable(self):
    # 两个输入框都有内容时启用Add按钮
    if self.lineEditData1.text().strip() and self.lineEditData2.text().strip():
        self.buttonAdd.setEnabled(True)
    else:
        self.buttonAdd.setEnabled(False)

# 修改后的add_entry函数
def add_entry(self):
    Data1 = self.lineEditData1.text().strip()
    Data2 = self.lineEditData2.text().strip()
    
    try:
        data1_val = int(Data1)
        data2_val = float(Data2)
        # 先传字符串作为显示内容
        Data1Item = QTableWidgetItem(str(data1_val))
        Data2Item = QTableWidgetItem(str(data2_val))
        # 如果需要存储原始数值方便后续计算,可以用setData存储
        Data1Item.setData(Qt.UserRole, data1_val)
        Data2Item.setData(Qt.UserRole, data2_val)
        Data2Item.setTextAlignment(Qt.AlignRight | Qt.AlignCenter)
        
        self.table_r.insertRow(self.items)
        self.table_r.setItem(self.items, 0, Data1Item)
        self.table_r.setItem(self.items, 1, Data2Item)
        
        self.items +=1

        self.lineEditData1.setText('')
        self.lineEditData2.setText('')
    except (ValueError, TypeError) as e:
        # 调试阶段可以打印报错信息方便定位问题
        # print("输入格式错误:", e)
        pass
验证逻辑

修改后重新运行程序,在两个输入框分别输入整数、浮点数,点击Add按钮即可正常在表格中展示对应内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 11:15:01