PyQT QTableWidget单元格QCheckBox状态获取(QGIS插件开发)
QTableWidget 列内嵌QCheckBox取值异常解决
取值异常的核心原因
你在第0列塞到单元格里的控件,是用来做居中适配的外层QWidget,不是实际需要获取状态的QCheckBox。
- 直接通过
cellWidget(index, 0)拿到的对象是这个外层QWidget,它本身没有checkState()方法,原代码的取值逻辑从对象层面就不成立。 - QCheckBox是被放在外层QWidget的水平布局里的子控件,必须先从布局层级找到这个QCheckBox实例,才能读取它的勾选状态。
最小改动修正方案
不需要修改你之前创建表格、控件布局的全部原有逻辑,仅调整取值段的代码即可正常读取:
if result: for index in range(len(liste)): text = self.dlg_format.tableWidget.item(index, 1).text() format = self.dlg_format.tableWidget.cellWidget(index, 2).currentText() # 替换掉原错误的取值代码 # 拿到第0列的外层承载容器 wrapper_widget = self.dlg_format.tableWidget.cellWidget(index, 0) # 从容器的水平布局中取出第一个子控件,也就是你创建的QCheckBox real_checkbox = wrapper_widget.layout().itemAt(0).widget() # 读取勾选状态,两种常用返回值按需选用 check = real_checkbox.checkState() # 返回Qt枚举值(Qt.Checked/Qt.Unchecked) # 如需布尔类型结果直接判断勾选状态,可改用: # check = real_checkbox.isChecked()
低开销实现参考
如果对列内控件对齐精度要求不高,可去掉嵌套的外层QWidget+布局结构,直接利用QTableWidgetItem自带的勾选属性实现复选框效果:
- 为第0列的单元格item开启可勾选标志,通过
setCheckState()设置初始状态 - 取值时直接调用
tableWidget.item(index, 0).checkState()即可,省去嵌套布局的控件查找步骤
内容的提问来源于stack exchange,提问作者Mathys WOHL
相关产品推荐
相关产品推荐

