Проверьте все checkBox внутри проверяемого groupBox, установив и сняв флажок 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

Как я могу это сделать?


person james.rio    schedule 18.09.2017    source источник
comment
Когда вы создаете каждый флажок, просто добавьте такую ​​строку: self.GroupBox.toggled.connect(checkbox.setChecked).   -  person ekhumoro    schedule 18.09.2017


Ответы (1)


Эти изменения необходимо вносить каждый раз, когда изменяется QGroupBox, поэтому он обеспечивает переключаемый сигнал, поэтому слот будет подключен и будут внесены изменения.

Согласно документам:

checkable : 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_())
person eyllanesc    schedule 18.09.2017
comment
Я не могу голосовать, но это решило мою проблему! Спасибо! - person james.rio; 18.09.2017
comment
@james.rio Каждый может отметить ответ как правильный, справа есть стрелка, пожалуйста, отметьте его. - person eyllanesc; 18.09.2017
comment
@james.rio Пожалуйста, прочтите следующее, чтобы понять мое предложение: stackoverflow.com/tour - person eyllanesc; 18.09.2017
comment
извините, новинка здесь. Спасибо! - person james.rio; 18.09.2017