【问题标题】:PyQt - QComboBox connection confirmed but function is not being calledPyQt - QComboBox 连接已确认,但未调用函数
【发布时间】:2013-01-17 13:16:42
【问题描述】:

我在使用 PyQt 的信号/插槽问题上遇到了一些麻烦。我的代码在下面,但它可能值得一些解释。前两个 QObject.connect() 返回 True,所以我知道连接已建立。但是,当更改组合框中的选择时,不会按预期调用函数 getParameters。下面的 5 个连接用于调试和测试与 ComboBox 相关的其他信号。那些也不会按预期打印日志。

根据我在其他地方读到的有更新的方法来指定连接,这可能是问题吗?如果是这样,有人可以给我一个这种格式的例子吗?谢谢!

#interactive GUI connections:
    resultCombo = QObject.connect(self.dlg.ui.comboBox, SIGNAL("currentIndexChanged(const QString & text)"), self.getParameters)
    resultSpin = QObject.connect(self.dlg.ui.spinBox_bands, SIGNAL("valueChanged(int i)"), self.getParameters)
    QMessageBox.information( self.iface.mainWindow(),"Info", "connections: ComboBox = %s SpinBox = %s"%(str(resultCombo), str(resultSpin)) )
    QObject.connect(self.dlg.ui.comboBox, SIGNAL("currentIndexChanged(const QString & text)"), self.log1)
    QObject.connect(self.dlg.ui.comboBox, SIGNAL("currentIndexChanged(int index)"), self.log2)
    QObject.connect(self.dlg.ui.comboBox, SIGNAL("currentTextChanged(const QString & text)"), self.log3)
    QObject.connect(self.dlg.ui.comboBox, SIGNAL("highlighted(const QString & text)"), self.log4)
    QObject.connect(self.dlg.ui.comboBox, SIGNAL("activated(const QString & text)"), self.log5)

def log1(self,  input):
    QgsMessageLog.logMessage("currentIndexChanged string. input = " + str(input),  "Debug",  0)
def log2(self,  input):
    QgsMessageLog.logMessage("currentIndexChanged int. input = " + str(input),  "Debug",  0)
def log3(self,  input):
    QgsMessageLog.logMessage("currentTextChanged string. input = " + str(input),  "Debug",  0)
def log4(self,  input):
    QgsMessageLog.logMessage("highlighted string. input = " + str(input),  "Debug",  0)
def log5(self,  input):
    QgsMessageLog.logMessage("cactivated string. input = " + str(input),  "Debug",  0)

【问题讨论】:

    标签: python pyqt qcombobox qt-signals


    【解决方案1】:

    我解决了。正如我猜想的那样,它确实与“新样式”连接语法有关。我不完全确定为什么旧样式正在连接,但没有调用连接的函数,但它现在正在使用以下代码:

        self.dlg.ui.comboBox.currentIndexChanged['QString'].connect(self.getParameters)
        self.dlg.ui.spinBox_bands.valueChanged.connect(self.getParameters)
    

    对于那些不知道的人(我没有也找不到好的文档 - 链接?),['QString'] 参数允许您选择重载信号的结果类型。这对我来说很重要,因为我使用类型来区分发件人。但是,我想我应该更明确并使用

    sender = self.sender()
    

    在我的 getParameters 函数中,但这是有效的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-01
      • 1970-01-01
      • 2015-06-10
      • 2016-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-20
      相关资源
      最近更新 更多