通过选中并取消选中GroupBox,检查可检查组框内的所有复选框

时间:2017-09-18 13:03:30

标签: python pyqt pyqt4 qcheckbox qgroupbox

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

类似的东西:

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

我该怎么做?

1 个答案:

答案 0 :(得分:0)

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

根据docs

  

可检查:bool

     

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

     

如果此属性为true,则组框使用a显示其标题   复选框代替普通标签。如果选中该复选框,   群组框的孩子已启用;否则,他们是残疾人   不可访问。

从上面可以看出孩子们是残疾人,这是一个意想不到的情况,但我们的目的是启用它。

从以上所有方面来看,应该做到以下几点:

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