我使用从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'对象没有属性'路径'
看起来这个库在析构函数被调用之前被垃圾收集了。我不知道如何解决这个问题。
答案 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
。