每次更改都必须进行这些QGroupBox
更改,因此它提供了切换信号,因此将连接一个插槽并进行更改。
根据文档:
可检查:布尔
该属性保存分组框的标题中是否有复选框
如果此属性为真,则组框使用复选框代替普通标签显示其标题。如果选中该复选框,则启用组框的子项;否则,它们将被禁用且无法访问。
从上面观察到孩子被禁用,这是一个意外的情况,但我们是启用它。
综上所述,应做到以下几点:
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_())