PyQt QWidget 析构函数错误 'AttributeError: 'NoneType'对象没有属性'path''



我使用从QWidget继承的自定义小部件。这个小部件可能使用一个在线资源:一张我从互联网下载的图片,在QLabel实例中显示之前存储在本地文件中。

当用户关闭窗口时,我希望删除本地文件,所以我将析构函数更改为:

def __del__(self):
    if os.path.isfile( self.pictureFilename):
        os.remove( self.pictureFilename)

我有:

import os

在我剧本的开头。奇怪的是,当主应用程序关闭时,我得到了错误:

追踪(最近一次通话):

文件"/home/XX/XXX/XXX.py";,第103行,del

AttributeError:"NoneType"对象没有属性"path"

看起来库在调用析构函数之前就已经被垃圾收集了。我不知道该怎么解决。

查看github代码,问题似乎是当小部件关闭时,Qt应用程序终止并调用sys.exit(),因此模块可能在__del__调用之前被垃圾收集。

那里:

if __name__ == '__main__':
    app = QApplication( sys.argv)
    url = "http://www.transfermarkt.co.uk/cristiano-ronaldo/profil/spieler/8198"
    ex = PlayerWindow( url)
    sys.exit( app.exec_())

为了避免这个问题,我建议使用closeEvent(event)形式QWidgethttp://doc.qt.io/qt-5/qwidget.html#closeEvent

将您的__del__功能替换为:

def closeEvent(self, event):
    if os.path.isfile( self.pictureFilename):
        os.remove( self.pictureFilename)
    del self.profile
    del self.pictureLabel

一般来说,您应该尽量避免使用__del__自动完成带有垃圾回收的对象,而不在代码中显式调用del object

最新更新