RuntimeError: wrapped C/C++ object of type has been deleted
这个问题是我在利用pyqt5编写多界面时出现的,解决这个问题用了很长时间,查阅了很多资料,来记录一下。我不是专业编程者,所以在表述上会比较浅显、不够准确,请大家多多包涵。1. 如果被调用的界面的代码中有类似这句:self.setAttribute(Qt.WA_DeleteOnClose)请删掉它。这句代码会在被调用界面关闭但主界面没关闭时,删除被调用界面的控件信息,具体的我讲不太好,不过这属于py
·
这个问题是我在利用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代替多界面。但我没有这么做,因为对于我来说多界面是必需的。如果在可以选择的情况下,不使用多界面则可以直接避免这种情况。
更多推荐
已为社区贡献1条内容
所有评论(0)