Как связать состояние QChekBox с состоянием QComboBox?

Я хочу включить поле со списком, которое отключено в редакторе свойств в Qt Designer, но только в том случае, если пользователь установит флажок. Я написал следующее, но это не работает. Он помещен внутри метода __init__ моего основного класса. Не могли бы вы помочь мне понять, почему?

if self.dlg.checkBox.isChecked():
    self.dlg.cmbvectorLayer6.setEnabled(True)

ИЗМЕНИТЬ:

Теперь у меня есть следующее в методе __init__ моего основного класса:

self.dlg.checkBox.stateChanged[int].connect(self.enablecombo)

с enablecombo:

def enablecombo(self):
    self.dlg.cmbvectorLayer6.setEnabled(True)

и он отлично работает, чтобы активировать поля со списком. Но я не уверен, как сделать эквивалент, чтобы отключить поля со списком, когда флажок не установлен...


person Eleftheria    schedule 18.11.2015    source источник


Ответы (3)


Класс QCheckBox наследует QAbstractButton, поэтому вы можете использовать сигнал toggled делать то, что вы хотите:

    self.dlg.checkBox.toggled.connect(self.enablecombo)
    ...

def enablecombo(self, checked):
    self.dlg.cmbvectorLayer6.setEnabled(checked)

Или подключитесь к комбинированному полю напрямую:

    self.dlg.checkBox.toggled.connect(self.dlg.cmbvectorLayer6.setEnabled)

(Вы также можете настроить такие виды прямых подключений в Qt Designer, используя Режим редактирования сигналов и слотов)

person ekhumoro    schedule 18.11.2015

if self.dlg.checkBox.isEnabled():
    self.dlg.cmbvectorLayer6.setEnabled(True)

Вы проверяете, что состояние проверено, но вам нужно проверить isEnabled

person Achayan    schedule 18.11.2015
comment
флажок должен быть всегда включен .. когда он установлен, отключенное поле со списком должно стать включенным - person Eleftheria; 18.11.2015

self.dlg.checkBox.stateChanged[int].connect(self.checkcombo) 

каким бы ни было текущее состояние, просто вызовите функцию, которая проверяет его, а затем на основе его вывода включает/отключает его.

def checkcombo():
    if self.dlg.checkBox.isChecked():
        self.dlg.cmbvectorLayer6.setEnabled(True)
    else:
        self.dlg.cmbvectorLayer6.setEnabled(False)
person user5509884    schedule 18.11.2015
comment
может быть я не так написал.. поле со списком отключено, а не флажок.. но если пользователь хочет использовать поле со списком, сначала необходимо установить флажок, чтобы поле со списком было включено - person Eleftheria; 18.11.2015
comment
извините, я неправильно прочитал вопрос. какую ошибку вы получили? судя по твоему коду должно работать - person user5509884; 18.11.2015
comment
спасибо, это работает, и я тоже это понимаю .. просто в def checkcombo () нужно передать аргумент self - person Eleftheria; 18.11.2015