Reputation: 1375
I am attempting to use a QtCore.Signal
to send a new instance of a class to the object's parent.
What I am attempting to do is as follows, but fails with:
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)
By Changing the line:
mySignal = QtCore.Signal(myClass)
to
mySignal = QtCore.Signal(QtGui.QMainWindow)
seems to fix the error, but I am not sure if that is the correct way to do something like this, other than it probably isn't the best way to do what I am doing.
Upvotes: 2
Views: 148
Reputation: 11849
The typical way to do this would be to define the signal as
mySignal = QtCore.Signal(object)
since you wish to emit an instance of a class.
EDIT: If you wish to work around the circular dependency, you can place your signal in a wrapper class. E.g.
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)
Upvotes: 2