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

时间:2016-07-22 11:53:40

标签: python python-3.x debugging pyqt

我使用从QWidget继承的自定义小部件。这个小部件可以使用在线资源:我从互联网上下载并存储在本地文件中的图片,然后在QLabel实例中显示它。

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

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

我有:

import os

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

  

追踪(最近一次呼叫最后一次):

     

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

     

AttributeError:' NoneType'对象没有属性'路径'

看起来这个库在析构函数被调用之前被垃圾收集了。我不知道如何解决这个问题。

1 个答案:

答案 0 :(得分:2)

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

有:

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)表格QWidget http://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