PyQt: Absturz mit Laufzeitfehler: eingewickelt C/C++ - Objekt wurde gelöscht

Wenn ich diesen code ausführen:

    #!/usr/local/bin/   python3

import sys 
from PyQt4.QtCore import *
from PyQt4.QtGui import *


class Window(QMainWindow):

    def __init__(self):
        super().__init__()
        self.button1 = QPushButton("1")
        self.button2 = QPushButton("2")
        self.setCentralWidget(self.button1)
        self.button1.clicked.connect(lambda: self.setCentralWidget(self.button2))
        self.button2.clicked.connect(lambda: self.setCentralWidget(self.button1))
        self.show()

if __name__ == '__main__':

    import sys 
    app = QApplication(sys.argv)
    window = Window()
    sys.exit(app.exec_())

...Bekomme ich diese Ausgabe:

Traceback (most recent call last):
  File "test.py", line 16, in <lambda>
    self.button2.clicked.connect(lambda: self.setCentralWidget(self.button1))
RuntimeError: wrapped C/C++ object of type QPushButton has been deleted

Verstehe ich nicht, warum das Objekt gelöscht wird. Fenster sollten weiterhin einen Verweis darauf.
Ich habe Sie gründlich untersucht, diese Beiträge:
Das Verständnis der "zugrunde liegenden C - /C++ - Objekt wurde gelöscht" - Fehler
Kann ein PyQt4 QObject abgefragt werden, um zu bestimmen, wenn die zugrunde liegende C++ - Instanz zerstört wurde?

Warum ist der button gelöscht wird?

Ich hatte ein ähnliches problem mit eine Unterklasse von QWidget, und es stellte sich heraus, das problem war, dass ich vergessen hatte, zu rufen, QWidget ' s __init__ zu Beginn meiner __init__. Tricksy.

InformationsquelleAutor Brian | 2013-07-29

Schreibe einen Kommentar