Wenn ich diesen Code ausführen:
%Vor%... Ich bekomme diese Ausgabe:
%Vor%Ich verstehe nicht, warum das Objekt gelöscht wird. Fenster sollte einen Verweis darauf beibehalten. Ich habe diese Beiträge gründlich untersucht: Das "zugrundeliegende C / C ++ Objekt wurde gelöscht" Fehler Kann ein PyQt4-QObject abgefragt werden, um festzustellen, ob die zugrundeliegende C ++ - Instanz zerstört wurde?
Warum wird die Schaltfläche gelöscht?
Diese Antwort auf diese Frage finden Sie hier: Python PySide (internes c ++ - Objekt bereits gelöscht)
Offenbar wird das zu QMainWindow gehörende Widget mit setCentralWidget zugewiesen und dann ein anderes Widget mit setCentralWidget zugewiesen. Dies führt dazu, dass das zugrundeliegende c ++ QWidget gelöscht wird, obwohl ich ein Objekt habe, das den Verweis darauf behält.
Hinweis: QMainWindow übernimmt den Eigentümer des Widget-Zeigers und löscht ihn zum passenden Zeitpunkt.
Brains Antwort erklärt das Problem perfekt. Dieser Link erläutert die Dinge detaillierter.
Meine Lösung für dieses Problem bestand darin, die Widgets als Attribute des Objekts festzulegen (z. B. einfach self.label = ...
anstelle von label = ...
in Ihren Klassenmethoden verwenden). Möglicherweise möchten Sie das Gleiche für alle Layouts tun, die mit dem Widget verknüpft sind.
Auf diese Weise erstellen Sie eine Kopie des Widgets, sodass Sie bei der C ++ - Speicherbereinigung immer noch einen Verweis auf das Widget haben.
Hoffe, das hilft.
Tags und Links garbage-collection pyqt4 pyqt qobject qmainwindow