RuntimeError: wrapped C/C++ object of type has been deleted

这个问题是我在利用pyqt5编写多界面时出现的,解决这个问题用了很长时间,查阅了很多资料,来记录一下。我不是专业编程者,所以在表述上会比较浅显、不够准确,请大家多多包涵。

1. 如果被调用的界面的代码中有类似这句:

self.setAttribute(Qt.WA_DeleteOnClose)

请删掉它。这句代码会在被调用界面关闭但主界面没关闭时,删除被调用界面的控件信息,具体的我讲不太好,不过这属于python和C++冲突的地方。毕竟pyqt就是把python和C++的Qt联系在一起的嘛。

2. 如果被调用的界面是用QMainWindow编写的,则也可能会出现上述问题。

因为QMainWindow默认centralwidget布局,可能会引起上述问题。建议不使用QMainWindow,自己使用布局来写,比如gridLayout等。

举例:

self.gridLayout = QtWidgets.QGridLayout(self)
self.gridLayout.setContentsMargins(0, 0, 0, 0)
self.gridLayout.setObjectName("gridLayout")
self.gridLayout.setAlignment(Qt.AlignCenter)

self.groupBox = QtWidgets.QGroupBox()
self.groupBox.setMinimumSize(QtCore.QSize(500, 600))
self.groupBox.setObjectName("groupBox")
self.gridLayout.addWidget(self.groupBox)

3. 可以使用QStackedWidget代替多界面。但我没有这么做,因为对于我来说多界面是必需的。如果在可以选择的情况下,不使用多界面则可以直接避免这种情况。

你可能感兴趣的:(RuntimeError: wrapped C/C++ object of type has been deleted)