首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从QCheckbox中读取QTableWidget状态

如何从QCheckbox中读取QTableWidget状态
EN

Stack Overflow用户
提问于 2021-09-20 20:45:08
回答 1查看 154关注 0票数 0

我使用以下方法将一个QCheckBox项添加到QTableWidget中的一个单元格中:

代码语言:javascript
运行
复制
cell_widget = QWidget()
chk_bx = QCheckBox()
chk_bx.setCheckState(QtCore.Qt.Unchecked)
lay_out = QHBoxLayout(cell_widget)
lay_out.addWidget(chk_bx)
lay_out.setAlignment(QtCore.Qt.AlignCenter)
lay_out.setContentsMargins(0,0,0,0)
cell_widget.setLayout(lay_out)
self.definedEventsTable.setCellWidget(row, select_column, cell_widget)

变量definedEventsTable是一个QTableWidget

上面的代码运行良好,复选框在GUI上正确显示,并且是可检查的。没什么不对的。

然而,当我试图阅读是否检查它时,我似乎无法这样做。以下是我尝试过的:

代码语言:javascript
运行
复制
self.definedEventsTable.item(row, select_column)
self.definedEventsTable.itemAt(row, select_column)
self.definedEventsTable.cellWidget(row, select_column)

其中每一个返回None,因此无法运行isChecked()。我做错了什么?

编辑

抱歉,下面的内容似乎是有效的。很明显我摸索了一下什么的。

代码语言:javascript
运行
复制
self.definedEventsTable.cellWidget(row, select_column)

但是,它返回一个QWidget。我怎样才能得到QCheckbox

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-20 20:56:42

cellWidget方法返回单元格中的小部件集,在您的示例中是"cellWidget“,因此有几个选项可以获得关联的QCheckBox:

-使用findChild

代码语言:javascript
运行
复制
cell_widget = self.definedEventsTable.cellWidget(row, select_column)
checkbox = cell_widget.findChild(QCheckBox)
if checkbox:
    print(checkbox)

-自定义属性

代码语言:javascript
运行
复制
cell_widget = QWidget()
chk_bx = QCheckBox()
chk_bx.setCheckState(QtCore.Qt.Unchecked)
lay_out = QHBoxLayout(cell_widget)
lay_out.addWidget(chk_bx)
lay_out.setAlignment(QtCore.Qt.AlignCenter)
lay_out.setContentsMargins(0,0,0,0)
cell_widget.checkbox = chk_bx
self.definedEventsTable.setCellWidget(row, select_column, cell_widget)

然后:

代码语言:javascript
运行
复制
cell_widget = self.definedEventsTable.cellWidget(row, select_column)
if hasattr(cell_widget, "checkbox"):
    checkbox = cell_widget.checkbox
    print(checkbox)

-自定义QWidget

代码语言:javascript
运行
复制
class Widget(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)

        self.chk_bx = QCheckBox()
        self.chk_bx.setCheckState(QtCore.Qt.Unchecked)
        lay_out = QHBoxLayout(self)
        lay_out.addWidget(self.chk_bx)
        lay_out.setAlignment(QtCore.Qt.AlignCenter)
        lay_out.setContentsMargins(0,0,0,0)
代码语言:javascript
运行
复制
cell_widget = Widget()
self.definedEventsTable.setCellWidget(row, select_column, cell_widget)

然后:

代码语言:javascript
运行
复制
cell_widget = self.definedEventsTable.cellWidget(row, select_column)
checkbox = cell_widget.chk_bx
print(checkbox)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69260616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档