【问题标题】:Check all checkBoxes inside of a checkable groupBox by checking and unchecking the GroupBox通过选中和取消选中 GroupBox 来检查可选中的 groupBox 内的所有复选框
【发布时间】:2017-09-18 13:03:29
【问题描述】:

我有一个 GroupBox,里面有 6 个复选框。我希望在我检查 GroupBox 时检查它们,并在我取消选中 GroupBox 时取消选中它们,就像切换所有它们一样。

类似:

for box in self.GroupBox.findChildren(QtGui.QCheckBox):
    if self.GroupBox.isChecked()==True:
        box.setChecked ==True
    else:
        pixel_box.setChecked == False

我该怎么做?

【问题讨论】:

  • 创建每个复选框时,只需添加如下一行:self.GroupBox.toggled.connect(checkbox.setChecked)

标签: python pyqt pyqt4 qcheckbox qgroupbox


【解决方案1】:

每次QGroupBox 更改时都必须进行这些更改,因此它提供了切换信号,因此将连接一个插槽并进行更改。

根据docs

可检查:bool

此属性保存分组框的标题中是否有复选框

如果此属性为 true,则组框使用 复选框代替普通标签。如果复选框被选中, 启用组框的子项;否则,它们将被禁用并且 无法访问。

从上面观察到孩子被禁用了,这是一个意想不到的情况,但我们是要启用它。

从以上所有内容中应该完成以下操作:

    self.GroupBox.toggled.connect(self.onToggled)
    self.GroupBox.setCheckable(True)

def onToggled(self, on):
    for box in self.sender().findChildren(QtGui.QCheckBox):
        box.setChecked(on)
        box.setEnabled(True)

实现上述的示例如下:

class Widget(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.setLayout(QtGui.QVBoxLayout())
        self.GroupBox = QtGui.QGroupBox(self)

        self.GroupBox.setLayout(QtGui.QVBoxLayout())
        for i in range(6):
            checkbox = QtGui.QCheckBox("{}".format(i), self.GroupBox)
            self.GroupBox.layout().addWidget(checkbox)

        self.layout().addWidget(self.GroupBox)
        self.GroupBox.toggled.connect(self.onToggled)
        self.GroupBox.setCheckable(True)

    def onToggled(self, on):
        for box in self.sender().findChildren(QtGui.QCheckBox):
            box.setChecked(on)
            box.setEnabled(True)


if __name__ == '__main__':
    import sys

    app = QtGui.QApplication(sys.argv)
    w = Widget()
    w.show()
    sys.exit(app.exec_())

【讨论】:

  • 我不能投票,但它解决了我的问题!谢谢!
  • @james.rio 每个人都可以将回复标记为正确,右侧有箭头,请标记。
  • @james.rio 请阅读以下内容以便您理解我的建议:stackoverflow.com/tour
  • 抱歉,新来的。谢谢!
猜你喜欢
  • 1970-01-01
  • 2015-07-08
  • 2019-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-16
  • 1970-01-01
相关资源
最近更新 更多