Ich versuche, eine QtCore.Signal
zu verwenden, um eine neue Instanz einer Klasse an das Elternobjekt des Objekts zu senden. Was ich versuche zu tun ist, wie folgt, doch irgendwie:Kann ein QtCore-Signal auf die aktuelle Klasse gesetzt werden?
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)
durch Ändern der Zeile:
mySignal = QtCore.Signal(myClass)
zu
mySignal = QtCore.Signal(QtGui.QMainWindow)
scheint den Fehler zu beheben, aber ich bin mir nicht sicher, ob das der richtige Weg ist, etwas so zu tun, außer dass es wahrscheinlich nicht der beste Weg ist, um das zu tun, was ich mache.
Gibt es einen Vorteil für eine präzisere Typisierung? Wenn ich zum Beispiel "int" durch ein Signal passiere, könnte ich auch "Objekt" verwenden, da (fast?) Alles "erstklassig" ist? –
@busfault Wenn Sie Ihre Slots auch mit 'pyqtSlot' definieren, können Sie durch das Spezifizieren Ihrer Typen Fehler erkennen. Es kann auch gut sein, wenn Sie Signale über Threads senden, und die Dokumentation zeigt an, dass es mehr Speicher effizient sein kann. –
@BrendanAbel Ich verwende 'PySide', die nicht' pyqtSlot', nur 'QtCore.Slot()' '' pyqtSlot' bietet die Möglichkeit, "Typ" -Fehler zu fangen? Ein Problem, auf das ich einmal gestoßen bin, war, dass ich eine 'Signal'-Definition änderte und nicht den entsprechenden' Slot' und plötzlich bekam der 'Slot' nicht mehr das' Signal'. –