Python 手动触发PyQt/PySide内存错误? 背景
我正在创建一个PyQt5应用程序,遇到了这个问题Python 手动触发PyQt/PySide内存错误? 背景,python,pyqt,pyqt5,Python,Pyqt,Pyqt5,我正在创建一个PyQt5应用程序,遇到了这个问题 内部C++对象已删除 这是由以下描述的陷阱造成的: 如果一个QObject在Python中不在范围内,它将被删除 因此,我可以通过使用可选的parent=参数或通过存储对我遇到问题的对象的引用来避免这个问题 问题: 为了测试目的,我想知道是否可以手动触发这个问题(内部C++对象已经删除) 这是一个间歇性的问题,所以为了能够测试这一点,我需要一些可靠的方法来复制它 (我不想存储对所有对象的引用,而是只在需要时保留引用) 我正在运行PyQt5.
<代码>内部C++对象已删除
这是由以下描述的陷阱造成的: 如果一个QObject在Python中不在范围内,它将被删除 因此,我可以通过使用可选的parent=
参数或通过存储对我遇到问题的对象的引用来避免这个问题
问题:
为了测试目的,我想知道<强>是否可以手动触发这个问题(<代码>内部C++对象已经删除)
这是一个间歇性的问题,所以为了能够测试这一点,我需要一些可靠的方法来复制它 (我不想存储对所有对象的引用,而是只在需要时保留引用)我正在运行PyQt5.15和Python3.8。请注意:根据绑定的不同,错误消息会有所不同:
- PyQt5
RuntimeError: wrapped C/C++ object of type <QtClass> has been deleted
from PyQt5 import QtCore import sip o = QtCore.QObject() o.setProperty("foo", "bar") sip.delete(o) o.setProperty("foo", "bar")
- PySide2
RuntimeError: Internal C++ object (PySide2.<QtModule>.<QtClass>) already deleted.
from PySide2 import QtCore import shiboken2 o = QtCore.QObject() o.setProperty("foo", "bar") shiboken2.delete(o) o.setProperty("foo", "bar")
gc.collect()
,但这并没有引发我所看到的任何问题)我想我要问的是:是否有可能对所有对象执行类似于您所描述的、但全局性的操作?在实际测试中,很难为所有对象添加代码(我可能会错过一些东西)。