【问题标题】:How to read QCheckbox state from QTableWidget如何从 QTableWidget 读取 QCheckbox 状态
【发布时间】:2021-11-14 12:39:09
【问题描述】:

我正在使用以下内容将QCheckBox 项目添加到我的QTableWidget 中的一个单元格中:

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 上正确显示并且是可检查的。没有错。

但是,当我尝试读取它是否被选中时,我似乎无法这样做。这是我尝试过的:

self.definedEventsTable.item(row, select_column)
self.definedEventsTable.itemAt(row, select_column)
self.definedEventsTable.cellWidget(row, select_column)

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

编辑

抱歉,以下操作似乎有效。显然我是在摸索什么的。

self.definedEventsTable.cellWidget(row, select_column)

但是,它返回一个QWidget。如何获得QCheckbox?

【问题讨论】:

  • 注意:itemAt 返回给定坐标处的项目,参考视口。对于给定的 point,参数是 x 和 y,而不是行和列。然后,默认情况下 QCheckBox 始终处于未选中状态(就像所有 QAbstractButton 子类一样),因此无需设置状态。

标签: python python-3.x pyqt pyqt5


【解决方案1】:

cellWidget 方法返回单元格中设置的小部件,在您的情况下是“cellWidget”,因此有几个选项可以获取关联的 QCheckBox:

- 使用 findChild

cell_widget = self.definedEventsTable.cellWidget(row, select_column)
checkbox = cell_widget.findChild(QCheckBox)
if checkbox:
    print(checkbox)

- 自定义属性

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)

然后:

cell_widget = self.definedEventsTable.cellWidget(row, select_column)
if hasattr(cell_widget, "checkbox"):
    checkbox = cell_widget.checkbox
    print(checkbox)

- 自定义 QWidget

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)
cell_widget = Widget()
self.definedEventsTable.setCellWidget(row, select_column, cell_widget)

然后:

cell_widget = self.definedEventsTable.cellWidget(row, select_column)
checkbox = cell_widget.chk_bx
print(checkbox)

【讨论】:

  • 非常感谢
猜你喜欢
  • 2020-06-07
  • 2012-05-28
  • 1970-01-01
  • 1970-01-01
  • 2020-12-30
  • 2014-04-22
  • 1970-01-01
  • 2019-08-16
相关资源
最近更新 更多