Может ли сигнал QtCore быть установлен для текущего класса?
Я пытаюсь использовать QtCore.Signal
отправить новый экземпляр класса родителю объекта. То, что я пытаюсь сделать, заключается в следующем, но терпит неудачу с:
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)
похоже, исправляет ошибку, но я не уверен, что это правильный способ сделать что-то подобное, кроме того, что это, вероятно, не лучший способ сделать то, что я делаю.
1 ответ
Решение
Типичным способом сделать это было бы определить сигнал как
mySignal = QtCore.Signal(object)
так как вы хотите создать экземпляр класса.
РЕДАКТИРОВАТЬ: Если вы хотите обойти циклическую зависимость, вы можете поместить свой сигнал в класс оболочки. Например
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)