未绑定方法的第一个参数必须是“QObject”类型
正如错误所说,您需要为QtCore.QObject.emit 传递对A 的引用或使用实例方法调用它:
QtCore.QObject.emit(self, QtCore.SIGNAL('mySignal'), "Hello World")
或者
self.emit(QtCore.SIGNAL('mySignal'), "Hello World")
完整的工作示例(如果我理解正确的话):
from PyQt4 import QtCore
class A(QtCore.QObject):
mySignal = QtCore.SIGNAL('mySignal(QString)')
def __init__(self):
QtCore.QObject.__init__(self)
def create_b(self):
return B(self)
def some_action(self):
QtCore.QObject.emit(self, QtCore.SIGNAL('mySignal'), "Hello World")
# this will work too
self.emit(QtCore.SIGNAL('mySignal'), "Hello World")
class B(QtCore.QObject):
def __init__(self, creator):
QtCore.QObject.__init__(self)
self._creator = creator
self.connect(self._creator, QtCore.SIGNAL('mySignal'), self.mySlot)
def mySlot(self, str):
print str
a = A()
b = a.create_b()
a.some_action()
更好的解决方案是使用New-style Signals and Slots
这里是你的例子:
from PyQt4 import QtCore
class A(QtCore.QObject):
mySignal = QtCore.pyqtSignal(str)
def __init__(self):
QtCore.QObject.__init__(self)
def create_b(self):
return B(self)
def some_action(self):
self.mySignal.emit("Hello World")
class B(QtCore.QObject):
def __init__(self, creator):
QtCore.QObject.__init__(self)
self._creator = creator
self._creator.mySignal.connect(self.mySlot)
def mySlot(self, str):
print str
a = A()
b = a.create_b()
a.some_action()