Ho un widget che dovrebbe eseguire una pulizia manuale dopo che è stato distrutto (interrompere alcuni thread). Tuttavia per qualche motivo il segnale "distrutto" del widget non sta sparando. Ho fatto questo piccolo esempio che dimostra il problema.Il segnale "distrutto" del widget non viene attivato (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)
Mi aspettavo che stampasse "Hello World!" quando la finestra principale è chiusa. Tuttavia, non stampa nulla.
È possibile condividere il codice che stampa Hello World con me? Ho provato a modificare il codice in base alle tue istruzioni ma ancora non funziona. http://pastebin.com/ZCgteHu4 – Scintillo
Questo è molto strano. L'unica differenza nel mio codice è che 'doSomeDestruction' è definito tra le due classi. Ma ora ho scoperto che funziona anche solo a volte. Anche un ['gc.collect'] (http://docs.python.org/3.3/library/gc.html#gc.collect), ma non ha avuto effetto. Spero che/qualcuno possa trovare un modo per farlo funzionare. – TobiMarg
Vedere la mia risposta aggiornata. Dovrei lavorare ora. (non importa dove 'doSomeDestruction' è definito) – TobiMarg