用很多参数连接信号到功能?

时间:2013-07-21 16:24:20

标签: qt4 pyqt4

我在python def中有这个功能:

def niveau(controlName,idNiveau)

我想以这种方式将它连接到这个信号:

QObject.connect(dialog.findChild(QDialogButtonBox, 'buttonBox'), SIGNAL('accepted()'),niveau(control,1))

我收到以下错误:

  

Qt信号无法调用

有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

您得到的错误是因为QObject.connect有3个参数意味着:

  

QObject.connect(QObject, SIGNAL(), callable, Qt.ConnectionType=Qt.AutoConnection)

您传递的第三个参数不是可调用的,而是调用niveau(control,1)的返回值。

发出信号的参数是在发射时确定的,而不是在连接时确定的。如果您想在连接时拼写一些(或所有)参数,您可以:

  • 使用functools.partial

    from functools import partial
    QObject.connect(... , partial(niveau, control, 1))
    
  • 使用lambda

    QObject.connect(... , lambda ctrl=control, id=1: niveau(ctrl, id))
    

编辑:

顺便说一句,你应该使用new style signals - 旧式信号will not be supported anymore in PyQt5