PyQt: RuntimeError: wrapped C/C++ object has been deleted
Question: If I run this code:

    
    
        #!/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_())
    

...I get this output:

    
    
    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
    

I do not understand why the object is being deleted. Window should maintain a
reference to it. I have thoroughly investigated these posts: [Understanding
the “underlying C/C++ object has been deleted”
error](http://stackoverflow.com/questions/6002895/understanding-the-
underlying-c-c-object-has-been-deleted-error) [Can a PyQt4 QObject be queried
to determine if the underlying C++ instance has been
destroyed?](http://stackoverflow.com/questions/5122451/can-a-pyqt4-qobject-be-
queried-to-determine-if-the-underlying-c-instance-has-b?rq=1)

Why is the button being deleted?


Answer: This answer to this question is as found here: [Python PySide (Internal c++
Object Already Deleted)](http://stackoverflow.com/questions/5339062/python-
pyside-internal-c-object-already-deleted)

Apparently, assigning one widget to QMainWindow using setCentralWidget and
then assigning another widget with setCentralWidget will cause the underlying
c++ QWidget to be deleted, even though I have an object that maintains
reference to it.

> Note: QMainWindow takes ownership of the widget pointer and deletes it at
> the appropriate time.

