Отключить и включить радиокнопки из другого радиокнопки в PyQt4 Python

У меня есть 3 группы радиокнопок в формах «Да» или «Нет». Я хочу отключить последние 2 группы радиокнопок, если первая радиокнопка «Нет», и включить их, когда первая радиокнопка «Да». Я могу сделать включенным или отключенным по умолчанию, но переключение Да/Нет из первой группы не меняет результат во второй и третьей группе.

Вот краткое изложение моего кода:

self.yes_radioButtonGroup1 = QtGui.QRadioButton(self.centralwidget)      
self.yes_radioButtonGroup1.setObjectName(_fromUtf8("yes_radioButtonGroup1"))
self.no_radioButtonGroup1 = QtGui.QRadioButton(self.centralwidget)
self.no_radioButtonGroup1.setObjectName(_fromUtf8("no_radioButtonGroup1"))
self.radioButtonGroup1= QtGui.QButtonGroup(MainWindow)   
self.radioButtonGroup1.setObjectName(_fromUtf8("radioButtonGroup1"))
self.radioButtonGroup1.addButton(self.yes_radioButtonGroup1)
self.radioButtonGroup1.addButton(self.no_radioButtonGroup1)

self.yes_radioButtonGroup2 = QtGui.QRadioButton(self.centralwidget)      
self.yes_radioButtonGroup2.setObjectName(_fromUtf8("yes_radioButtonGroup2"))
self.no_radioButtonGroup2 = QtGui.QRadioButton(self.centralwidget)
self.no_radioButtonGroup2.setObjectName(_fromUtf8("no_radioButtonGroup2"))
self.radioButtonGroup2= QtGui.QButtonGroup(MainWindow)   
self.radioButtonGroup2.setObjectName(_fromUtf8("radioButtonGroup2"))
self.radioButtonGroup2.addButton(self.yes_radioButtonGroup1)
self.radioButtonGroup2.addButton(self.no_radioButtonGroup1)

self.yes_radioButtonGroup3 = QtGui.QRadioButton(self.centralwidget)      
self.yes_radioButtonGroup3.setObjectName(_fromUtf8("yes_radioButtonGroup3"))
self.no_radioButtonGroup3 = QtGui.QRadioButton(self.centralwidget)
self.no_radioButtonGroup3.setObjectName(_fromUtf8("no_radioButtonGroup3"))
self.radioButtonGroup3= QtGui.QButtonGroup(MainWindow)   
self.radioButtonGroup3.setObjectName(_fromUtf8("radioButtonGroup3"))
self.radioButtonGroup3.addButton(self.yes_radioButtonGroup3)
self.radioButtonGroup3.addButton(self.no_radioButtonGroup3)


if self.yes_radioButtonGroup1.isChecked() == True:
        self.yes_radioButtonGroup2.setEnabled(True)
        self.no_radioButtonGroup2.setEnabled(True)
        self.yes_radioButtonGroup3.setEnabled(True)
        self.no_radioButtonGroup3.setEnabled(True)

elif self.no_radioButtonGroup1.isChecked() == True:
        self.yes_radioButtonGroup2.setEnabled(False)
        self.no_radioButtonGroup2.setEnabled(False)
        self.yes_radioButtonGroup3.setEnabled(False)
        self.no_radioButtonGroup3.setEnabled(False)

Мне было интересно, знает ли кто-нибудь, как динамически включать или отключать две последние группы радиокнопок при изменении значений из первого радиокнопки?


person seyet    schedule 19.04.2018    source источник
comment
Являются ли радиокнопки эксклюзивными? Они находятся в QGroupBox?   -  person eyllanesc    schedule 19.04.2018
comment
Они являются эксклюзивными, по крайней мере один (Да или Нет) должен быть выбран. каждая пара находится в другой группе QButtonGroup   -  person seyet    schedule 19.04.2018


Ответы (1)


Поскольку кнопки достаточно эксклюзивны, чтобы контролировать одну из них, то соответствующий сигнал — toggled(), который отправляет информацию о том, отмечена ли кнопка или нет.

    self.yes_radioButtonGroup1 = QtGui.QRadioButton(self.centralwidget)      
    self.yes_radioButtonGroup1.setObjectName(_fromUtf8("yes_radioButtonGroup1"))
    self.no_radioButtonGroup1 = QtGui.QRadioButton(self.centralwidget)
    self.no_radioButtonGroup1.setObjectName(_fromUtf8("no_radioButtonGroup1"))
    self.radioButtonGroup1= QtGui.QButtonGroup(MainWindow)   
    self.radioButtonGroup1.setObjectName(_fromUtf8("radioButtonGroup1"))
    self.radioButtonGroup1.addButton(self.yes_radioButtonGroup1)
    self.radioButtonGroup1.addButton(self.no_radioButtonGroup1)

    self.yes_radioButtonGroup2 = QtGui.QRadioButton(self.centralwidget)      
    self.yes_radioButtonGroup2.setObjectName(_fromUtf8("yes_radioButtonGroup2"))
    self.no_radioButtonGroup2 = QtGui.QRadioButton(self.centralwidget)
    self.no_radioButtonGroup2.setObjectName(_fromUtf8("no_radioButtonGroup2"))
    self.radioButtonGroup2= QtGui.QButtonGroup(MainWindow)   
    self.radioButtonGroup2.setObjectName(_fromUtf8("radioButtonGroup2"))
    self.radioButtonGroup2.addButton(self.yes_radioButtonGroup1)
    self.radioButtonGroup2.addButton(self.no_radioButtonGroup1)

    self.yes_radioButtonGroup3 = QtGui.QRadioButton(self.centralwidget)      
    self.yes_radioButtonGroup3.setObjectName(_fromUtf8("yes_radioButtonGroup3"))
    self.no_radioButtonGroup3 = QtGui.QRadioButton(self.centralwidget)
    self.no_radioButtonGroup3.setObjectName(_fromUtf8("no_radioButtonGroup3"))
    self.radioButtonGroup3= QtGui.QButtonGroup(MainWindow)   
    self.radioButtonGroup3.setObjectName(_fromUtf8("radioButtonGroup3"))
    self.radioButtonGroup3.addButton(self.yes_radioButtonGroup3)
    self.radioButtonGroup3.addButton(self.no_radioButtonGroup3)

    self.yes_radioButtonGroup1.toggled(self.on_yes_checked)
    # set initial state
    self.on_yes_checked(self.yes_radioButtonGroup1.isChecked())

def on_yes_checked(self, checked):
    self.yes_radioButtonGroup2.setEnabled(checked)
    self.no_radioButtonGroup2.setEnabled(checked)
    self.yes_radioButtonGroup3.setEnabled(checked)
    self.no_radioButtonGroup3.setEnabled(checked)
person eyllanesc    schedule 19.04.2018
comment
На самом деле пример @ellyanesc работает отлично, извините за путаницу. - person seyet; 20.04.2018
comment
QButtonGroup() не имеет метода setEnabled() в Pyside2. Как я могу включить/отключить все кнопки в группе, кроме перебора всех кнопок. - person NZD; 31.01.2019