我在 python def 中有这个函数:
def niveau(controlName,idNiveau)
我想以这种方式将它连接到这个信号:
QObject.connect(dialog.findChild(QDialogButtonBox, 'buttonBox'), SIGNAL('accepted()'),niveau(control,1))
我收到以下错误:
Qt 信号不可调用
有人可以帮我弄这个吗?
您得到的错误是因为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 不再支持旧风格的信号。