У меня есть виджет, который должен был бы выполнить ручную очистку после его уничтожения (остановить некоторые потоки). Однако по какой-то причине «разрушенный» сигнал виджета не срабатывает. Я сделал этот небольшой пример, демонстрирующий проблему.Не удалось запустить «разрушенный» сигнал виджета (PyQT)
import sys
from PyQt4 import QtGui
class MyWidget(QtGui.QWidget):
def __init__(self, parent):
super(MyWidget, self).__init__(parent)
def doSomeDestruction():
print('Hello World!')
self.destroyed.connect(doSomeDestruction)
class MyWindow(QtGui.QMainWindow):
def __init__(self):
super(MyWindow, self).__init__()
self.widget = MyWidget(self)
app = QtGui.QApplication(sys.argv)
window = MyWindow()
window.show()
ret = app.exec_()
sys.exit(ret)
Я ожидал, что он напечатает "Hello World!" когда главное окно закрыто. Однако он ничего не печатает.
Можете ли вы поделиться кодом, который печатает Hello World со мной? Я попытался отредактировать код в соответствии с вашими инструкциями, но он все еще не работает. http://pastebin.com/ZCgteHu4 – Scintillo
Это очень странно. Единственное отличие в моем коде состоит в том, что 'doSomeDestruction' определяется между двумя классами. Но теперь я обнаружил, что он работает и только иногда. Также ['gc.collect'] (http://docs.python.org/3.3/library/gc.html#gc.collect), но это не повлияло. Я надеюсь, что мы/кто-то найдем способ заставить его работать. – TobiMarg
См. Мой обновленный ответ. Я должен сейчас работать. (независимо от того, где определен 'doSomeDestruction') – TobiMarg