通过选中和取消选中 GroupBox 来选中可选中的 groupBox 内的所有复选框

Check all checkBoxes inside of a checkable groupBox by checking and unchecking the GroupBox

我有一个 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

我该怎么做?

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

根据 docs:

checkable : bool

This property holds whether the group box has a checkbox in its title

If this property is true, the group box displays its title using a checkbox in place of an ordinary label. If the checkbox is checked, the group box's children are enabled; otherwise, they are disabled and inaccessible.

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

根据以上所有内容,应完成以下操作:

    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_())