如何将QChekBox状态连接到QComboBox状态?

时间:2015-11-18 18:24:13

标签: python pyqt signals-slots qcombobox qcheckbox

我想启用一个组合框 - 它在Qt Designer中的属性编辑器中被禁用 - 但是,仅当用户选中复选框时才会这样。我写了以下内容,但它不起作用。它被放在我的mainclass的__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)

并且它可以正常工作以激活组合框。但是,如果取消选中该复选框,我不确定如何取消激活组合框...

3 个答案:

答案 0 :(得分:2)

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)

(你也可以使用Signals and Slots Editing Mode在Qt Designer中设置这些直接连接)

答案 1 :(得分:0)

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

whatewer是当前状态,只需调用一个函数来检查它然后根据其输出启用/禁用它

def checkcombo():
    if self.dlg.checkBox.isChecked():
        self.dlg.cmbvectorLayer6.setEnabled(True)
    else:
        self.dlg.cmbvectorLayer6.setEnabled(False)

答案 2 :(得分:0)

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

检查状态是否已检查,但您需要检查isEnabled