Python PyQt QWidget析构函数错误'AttributeError:';非类型';对象没有属性';路径'`

Python PyQt QWidget析构函数错误'AttributeError:';非类型';对象没有属性';路径'`,python,python-3.x,debugging,pyqt,Python,Python 3.x,Debugging,Pyqt,我使用从QWidget继承的自定义小部件。这个小部件可能使用一个在线资源:我从互联网下载的图片,在显示在QLabel实例中之前存储在本地文件中 当用户关闭窗口时,我希望删除本地文件,因此我将析构函数更改为: def __del__(self): if os.path.isfile( self.pictureFilename): os.remove( self.pictureFilename) 我有: import os 在我剧本的开头。奇怪的是,当主应用程序关闭时,我

我使用从
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:“非类型”对象没有属性“路径”


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

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

在那里:

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)
formqwidget

将您的
\uuu del\uu
功能替换为以下内容:

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

一般来说,您应该尽量避免使用
\uu del\uu
自动完成垃圾收集对象,而不在代码中显式调用
del object
begin。

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

在那里:

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)
formqwidget

将您的
\uuu del\uu
功能替换为以下内容:

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

作为一般规则,您应该尽量避免使用
\uu del\uu
自动完成垃圾收集的对象,而无需在代码中显式调用
del object
开始。

第103行是
os.path.isfile()
call over?你能再给我们一些代码吗?我们可以运行这些代码来重现这种行为吗?@Suever:谢谢你的帮助,这是文件的最后一个版本:(我删除了一行,所以现在错误消息指向第102行),第103行是
os.path.isfile()
call over?您能再给我们一些代码吗?我们可以运行这些代码来重现行为?@Suever:谢谢您的帮助,这是文件的最后一个版本:(我删除了一行,所以现在错误消息指向第102行)非常感谢您的输入,它确实解决了问题。下次将记住使用
closeEvent
即使使用
del object
del
所做的就是删除一个引用(就像执行
object=None
),仍然无法保证何时(如果有的话)调用
\u del\u
。非常感谢您的输入,它确实解决了这个问题。下次将记住使用
closeEvent
即使使用
del object
del
所做的一切都是删除一个引用(就像执行
object=None
),仍然无法保证何时(如果有的话)调用