如何遍历QTableWidget的指定列并判断列内复选框是否处于选中状态
QTableWidget复选框状态获取问题解决方案
根因定位
你采用的是给QTableWidgetItem本身设置勾选属性的方式实现复选框,没有调用setCellWidget()往单元格内插入独立的QCheckBox控件,因此cellWidget()方法无法获取到对应控件,只会返回None。
此外你原有代码的checkBoxcheck函数中,循环内固定写死了cellWidget(1, 1),没有使用循环变量row,就算逻辑正确也无法遍历整列的所有行。
修复代码
直接通过item()方法获取对应单元格的QTableWidgetItem实例,调用checkState()方法判断选中状态即可,修改后的完整TableWidget类代码如下:
class TableWidget(QTableWidget): def __init__(self): super().__init__(10, 3) self.verticalHeader().setDefaultSectionSize(10) self.horizontalHeader().setDefaultSectionSize(200) for rows in range(self.rowCount()): item = QtWidgets.QTableWidgetItem() item.setCheckState(QtCore.Qt.Unchecked) self.setItem(rows, 1, item) def checkBoxcheck(self): print("checkBoxcheck started") target_col = 1 # 指定要校验的列下标,此处对应第二列 for row in range(self.rowCount()): item = self.item(row, target_col) if not item: continue # Qt.Checked 对应选中状态 Qt.Unchecked 对应未选中状态 if item.checkState() == Qt.Checked: print(f"第{row}行处于选中状态") # 此处补充你的业务逻辑 pass
内容的提问来源于stack exchange,提问作者Eliazar
相关产品推荐
相关产品推荐

