我想在销毁小部件之前发布一些资源,但我不想手动执行它(我有很多小部件,每个小部件都有自己的资源)。我希望在关闭整个GUI软件时自动调用release函数,就像我可以使用c ++在每个widget destruct函数中一样。我该怎么办?
编辑:主要资源是QThread,其事件循环是在构建小部件时启动的。我想在小部件被销毁之前停止事件循环。
编辑:正如@mguijarr所说,我将widget销毁的信号连接到资源释放功能,但它似乎不起作用:
from PySide import QtGui, QtCore
import sys
class MyWidget(QtGui.QWidget):
def __init__(self, *args, **kwargs):
print 'init MyWidget'
super(MyWidget, self).__init__(*args, **kwargs)
self.destroyed.connect(self.onDestroyed)
def onDestroyed(self):
print 'onDestroyed invoked'
if __name__ == '__main__':
a = QtGui.QApplication(sys.argv)
w = MyWidget()
w.setWindowTitle('Test')
w.show()
a.exec_()
print 'app exit!'
当我启动应用程序然后关闭它时,输出为:
init MyWidget
app退出!
答案 0 :(得分:0)
您可以连接来自destroyed
基类的QObject
信号
对于你自己的类似析构函数的小部件,有一个技巧:
小部件需要设置'DeleteOnClose'属性:
from PyQt4 import QtGui, QtCore
import sys
class MyWidget(QtGui.QWidget):
def __init__(self, *args, **kwargs):
print 'init MyWidget'
super(MyWidget, self).__init__(*args, **kwargs)
###
self.setAttribute(QtCore.Qt.WA_DeleteOnClose, True)
self.destroyed.connect(self.onDestroyed)
###
def onDestroyed(self):
print 'onDestroyed invoked'
if __name__ == '__main__':
a = QtGui.QApplication(sys.argv)
w = MyWidget()
w.setWindowTitle('Test')
w.show()
a.exec_()
print 'app exit!
输出:
~% python /tmp/bla.py
init MyWidget
onDestroyed invoked
app exit!