bei folgendem Problem komme ich nicht weiter: Dieses Mainframe hier:
Code: Alles auswählen
class UktvMainframe(QtWidgets.QMainWindow):
def __init__(self, parent=None, logger=None):
super().__init__(parent)
self.error_dialog = QtWidgets.QErrorMessage()
self.logger = logging.getLogger(__name__)
self.ui = uic.loadUi(r"C:\Users\Marc\PYTHON_DEVELOPMENT\PLAYOUT_APPLICATIONS\GUI\uktv_alarmingtool_mainframe.ui", self)
self.setFixedWidth(910)
self.setFixedHeight(755)
self.setAttribute(Qt.WA_DeleteOnClose)
Code: Alles auswählen
self.init_alarm_gen = AG.AlarmGenerator(raw_pts_format_lst, self.ui.alarm_in_sec, self.ui.refresh_data, self.ui.roi_alarms_del)
self.init_alarm_gen.moveToThread(self.worker_alarm_gen)
self.init_alarm_gen.alarm_msg.connect(self.displayAlarmLog) # Contains alarm for ROI
self.init_alarm_gen.CounterChange.connect(self.countChange) # Final Countdown for ROI
self.init_alarm_gen.all_alarms.connect(self.update_all_alarms) # Counter for exported ROI Alamrs
self.init_alarm_gen.auto_refresh_data.connect(self.recall_app) # work done
self.init_alarm_gen.killthread.connect(self.update_killthread_roi)
self.init_alarm_gen.start()
https://doc.qt.io/qtforpython-5/PySide2 ... Event.html
und dort das Flag self.setAttribute(Qt.WA_DeleteOnClose) gesetzt, was leider nicht zu dem gewünschten Ergebnis führt, dass AUCH der Thread geschlossen wird, sobald das Frame beendet wird. Probiert habe ich auch, die closeEvent Methode zu überschreiben. Leider ist die Mechanik einen Thread hier mit thread_worker.quit() & wait() zu beenden, eher Fehlerhaft. Erst wenn ich das Hauptframe der gesamten Applikation schließe, ist logischerweise der Thread auch Reif für die Garbage Collection. Ich wünsche mir aber, dass es schon in dem Unterframe geschieht und nicht erst das Signal des Hauptframes nötig ist.
Code: Alles auswählen
def closeEvent(self,event):
sys.exit() # Es soll nicht alles geschlossen werden, nur der Thread.