【问题标题】:How to connect QChekBox state to QComboBox state?如何将 QChekBox 状态连接到 QComboBox 状态?
【发布时间】:2016-02-20 15:05:09
【问题描述】:

我想启用一个组合框——它在 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)

它可以很好地激活组合框。但我不确定如何在未选中复选框时禁用组合框...

【问题讨论】:

    标签: python pyqt signals-slots qcombobox qcheckbox


    【解决方案1】:

    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 中设置这些类型的直接连接,使用 Signals and Slots Editing Mode

    【讨论】:

      【解决方案2】:
      if self.dlg.checkBox.isEnabled():
          self.dlg.cmbvectorLayer6.setEnabled(True)
      

      你检查状态是检查但你需要检查isEnabled

      【讨论】:

      • 复选框应始终启用..它是检查禁用的组合框时应启用 span>
      【解决方案3】:
      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)
      

      【讨论】:

      • 可能是我写得不好..combobox被禁用而不是checkbox..但是如果用户想使用combobox首先需要勾选checkbox以便combobox被启用
      • 对不起,我误读了这个问题。你得到了什么错误?根据您的代码,它应该可以工作
      • thanx 它正在工作,我也理解它.. 只是在 def checkcombo () 中需要传递 self 参数
      猜你喜欢
      • 2013-06-28
      • 1970-01-01
      • 1970-01-01
      • 2011-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-23
      • 1970-01-01
      相关资源
      最近更新 更多