我在python def中有这个功能:
def niveau(controlName,idNiveau)
我想以这种方式将它连接到这个信号:
QObject.connect(dialog.findChild(QDialogButtonBox, 'buttonBox'), SIGNAL('accepted()'),niveau(control,1))
我收到以下错误:
Qt信号无法调用
有人可以帮我吗?
答案 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。