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

QTableWidget中table.setItem()调用不当致无修改触发验证错误

问题原因与解决方法

问题原因

点击「Select」按钮时,cal_Select方法会调用table.setItem()重新设置单元格内容,这一操作会触发itemChanged信号,进而执行cellChange函数。而你的alldata数组里的内容(比如name1、value10)都是小写开头,符合val.islower() == True的判断条件,所以会触发错误提示。

解决方法

这里提供三种可行方案,按需选择:

方案一:临时断开信号再重连

在cal_Select里先断开信号连接,更新完单元格后再重新连接,避免程序自动更新时触发校验:

def cal_Select(self):
    # 临时断开itemChanged信号与cellChange的绑定
    self.table.itemChanged.disconnect(self.cellChange)
    i = 3
    while i >= 0:
        zz = 0
        while zz <= 1:
            item = self.alldata[i][zz]
            cell = QTableWidgetItem(item)
            self.table.setItem(i, zz, cell)
            zz += 1
        i -= 1
    # 更新完成后重新绑定信号
    self.table.itemChanged.connect(self.cellChange)

方案二:标记程序自动更新的内容

给程序自动设置的单元格加自定义标记,在cellChange里判断是否跳过校验:

  1. 在创建单元格的地方添加标记(包括calendar和cal_Select方法里):
cell = QTableWidgetItem(item)
cell.setData(QtCore.Qt.UserRole, True)  # 标记为程序自动设置的内容
self.table.setItem(i, zz, cell)
  1. 修改cellChange函数:
def cellChange(self, item):
    # 检查是否是程序自动设置的内容,是则跳过校验并清除标记
    if item.data(QtCore.Qt.UserRole):
        item.setData(QtCore.Qt.UserRole, None)
        return
    row = item.row()
    col = item.column()
    print(str(row) + '---' + str(col))
    val = item.text()
    if val == ' ':
        print("Cell cant contain a space")
        return
    if val.islower():
        print("Value must be CAPITAL")
        return

方案三:只校验特定列(按需使用)

如果cal_Select只更新前两列,且这两列不需要用户校验,可以在cellChange里判断列索引跳过:

def cellChange(self, item):
    col = item.column()
    # 前两列是程序更新的,跳过校验
    if col < 2:
        return
    row = item.row()
    print(str(row) + '---' + str(col))
    val = item.text()
    if val == ' ':
        print("Cell cant contain a space")
        return
    if val.islower():
        print("Value must be CAPITAL")
        return

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 02:50:35