可以将 QtCore 信号设置为当前 class 吗?
Can a QtCore Signal be set to the current class?
我正在尝试使用 QtCore.Signal
将 class 的新实例发送到对象的父对象。
我正在尝试做的事情如下,但失败了:
NameError: name 'myClass' is not defined
class myClass(QtGui.QMainWindow):
mySignal = QtCore.Signal(myClass)
def __init__(self, parent=None):
super(myClass, self).__init__(parent)
def create_new_self(self):
newSelf = myClass(self.parent())
self.mySignal.emit(newSelf)
class myParentClass(QtGui.QMainWindow):
def __init__(self, parent=None):
super(myParentClass, self).__init__(parent)
myNewClass = myClass(self)
myNewClass.mySignal.connect(self.handle_my_signal)
@QtCore.Slot(myClass)
def handle_my_signal(self, newMyClass):
newMyClass.mySignal.connect(self.handle_my_signal)
self.listOfClasses.append(newMyClass)
通过更改行:
mySignal = QtCore.Signal(myClass)
到
mySignal = QtCore.Signal(QtGui.QMainWindow)
似乎修复了错误,但我不确定这是否是执行此类操作的正确方法,除了它可能不是执行我正在做的事情的最佳方法。
执行此操作的典型方法是将信号定义为
mySignal = QtCore.Signal(object)
因为您希望发出 class.
的实例
编辑:如果你想解决循环依赖,你可以把你的信号放在一个包装器中class。例如
class myClass(QtGui.QMainWindow):
def __init__(self, parent=None):
super(myClass, self).__init__(parent)
# Note: argument of "self" is to parent the object
self.signalwrapper = MyWrapper(self)
def create_new_self(self):
newSelf = myClass(self.parent())
self.signalwrapper.mySignal.emit(newSelf)
class MyWrapper(QtCore.QObject):
mySignal = QtCore.Signal(myClass)
我正在尝试使用 QtCore.Signal
将 class 的新实例发送到对象的父对象。
我正在尝试做的事情如下,但失败了:
NameError: name 'myClass' is not defined
class myClass(QtGui.QMainWindow):
mySignal = QtCore.Signal(myClass)
def __init__(self, parent=None):
super(myClass, self).__init__(parent)
def create_new_self(self):
newSelf = myClass(self.parent())
self.mySignal.emit(newSelf)
class myParentClass(QtGui.QMainWindow):
def __init__(self, parent=None):
super(myParentClass, self).__init__(parent)
myNewClass = myClass(self)
myNewClass.mySignal.connect(self.handle_my_signal)
@QtCore.Slot(myClass)
def handle_my_signal(self, newMyClass):
newMyClass.mySignal.connect(self.handle_my_signal)
self.listOfClasses.append(newMyClass)
通过更改行:
mySignal = QtCore.Signal(myClass)
到
mySignal = QtCore.Signal(QtGui.QMainWindow)
似乎修复了错误,但我不确定这是否是执行此类操作的正确方法,除了它可能不是执行我正在做的事情的最佳方法。
执行此操作的典型方法是将信号定义为
mySignal = QtCore.Signal(object)
因为您希望发出 class.
的实例编辑:如果你想解决循环依赖,你可以把你的信号放在一个包装器中class。例如
class myClass(QtGui.QMainWindow):
def __init__(self, parent=None):
super(myClass, self).__init__(parent)
# Note: argument of "self" is to parent the object
self.signalwrapper = MyWrapper(self)
def create_new_self(self):
newSelf = myClass(self.parent())
self.signalwrapper.mySignal.emit(newSelf)
class MyWrapper(QtCore.QObject):
mySignal = QtCore.Signal(myClass)