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
相关产品推荐
相关产品推荐

