Ho problemi con QThreads in python. Voglio cambiare il colore di sfondo dell'etichetta. Ma la mia applicazione si è bloccata durante l'avvio. "QThread: distrutto mentre discussione è ancora in esecuzione"QThread: Distrutto mentre il thread è ancora in esecuzione
class MainWindow(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
statusTh = statusThread(self)
self.connect(statusTh, SIGNAL('setStatus'), self.st, Qt.QueuedConnection)
statusTh.start()
def st(self):
if self.status == 'ON':
self.ui.label.setStyleSheet('background-color:green')
else:
self.ui.label.setStyleSheet('background-color:red')
class statusThread(QThread):
def __init__(self, mw):
super(statusThread, self).__init__()
def run(self):
while True:
time.sleep(1)
self.emit(SIGNAL('setStatus'))
if __name__ == "__main__":
app = QApplication(sys.argv)
main_window = MainWindow()
main_window.show()
sys.exit(app.exec_())
Una soluzione in stile Qt, assegnare finestra principale, come 'genitore di statusTh', vale a dire,' super (statusThread, auto) .__ init __ (mw) '. – nymk
Grazie mille. Funziona ora –
Solo per informazione, questa è fondamentalmente la stessa cosa: in questo caso il genitore manterrà il riferimento all'istanza del thread e quindi non sarà raccolto. – rainer