【发布时间】:2020-05-08 14:15:48
【问题描述】:
我正在编写一个基于 PySide2 的应用程序,其中包括一个 QScrollArea,其中包含大量 QPixmap 图像(或更好:QLabel 的列表依次包含像素图)。该图像列表会随着时间的推移变得非常大,因此当达到一定数量时,我会定期从滚动区域中删除其中一些图像 - 这很好。
然而,我确实有这样的印象,即使在删除了一些图像之后,我的应用程序的内存消耗仍然相同。因此删除标签小部件可能还不够。来自 QLayout.removeWidget() 上的 PySide2 文档:
从布局中删除小部件小部件。在此调用之后,调用者有责任为小部件提供合理的几何形状,或者将小部件放回布局中,或者在必要时显式隐藏它。
为了删除小部件,我执行以下操作:
while self.images_scroll_layout.count() > MAX_IMAGES:
to_remove = self.images_scroll_layout.itemAt(self.images_scroll_layout.count() - 1)
self.images_scroll_layout.removeItem(to_remove)
to_remove.widget().deleteLater()
所以我的问题是:我需要手动销毁从布局中删除的标签/像素图,还是应该自动将它们进行垃圾收集?
【问题讨论】:
标签: python memory-management pyside2 qlabel qpixmap