0

我在 python def 中有这个函数:

def niveau(controlName,idNiveau)

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

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

我收到以下错误:

Qt 信号不可调用

有人可以帮我弄这个吗?

4

1 回答 1

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))
    

编辑:

顺便说一句,你真的应该使用新风格的信号- PyQt5 不再支持旧风格的信号。

于 2013-07-21T20:56:30.690 回答