При добавлении элемента в сцену тот, который управляет памятью элемента, больше не python, а сцена, но когда вы используете removeItem()
, он не удаляет его из памяти, а возвращает право владения элементом python, и в этом случае python удалите его, когда это будет сочтено необходимым, чтобы убедиться, что я создал простой пример:
from PyQt5 import QtCore, QtWidgets
class GraphicsRectItem(QtWidgets.QGraphicsRectItem):
def __del__(self):
print("deleted")
class MainWindow(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super().__init__(parent=parent)
self.scene = QtWidgets.QGraphicsScene()
self.view = QtWidgets.QGraphicsView(self.scene)
self.setCentralWidget(self.view)
item = GraphicsRectItem(10, 10, 100, 100)
self.scene.addItem(item)
QtCore.QTimer.singleShot(1000, lambda: self.scene.removeItem(item))
def main():
import sys
app = QtWidgets.QApplication(sys.argv)
mytable = MainWindow()
mytable.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main()
Если вы хотите явно удалить из памяти объект C ++ (не python объект), то вы можете использовать sip:
from PyQt5.QtWidgets import QGraphicsScene
# sip should be imported after pyqt5
import sip
# ...
scene.removeItem(item)
sip.delete(item)