diff options
| author | tassaron | 2022-04-30 21:45:16 -0400 |
|---|---|---|
| committer | tassaron | 2022-04-30 21:45:16 -0400 |
| commit | e79d9db9f16b325d7433fc19dc8ea24dfc8a132c (patch) | |
| tree | 469d24119bb00d7b144c4c4e0a0bb8f42ac85430 /src/gui/mainwindow.py | |
| parent | 43580a961e43c15d5685039058286d8dde9d58a4 (diff) | |
fix 'QThread killed while running' at program exit
Diffstat (limited to 'src/gui/mainwindow.py')
| -rw-r--r-- | src/gui/mainwindow.py | 30 |
1 files changed, 15 insertions, 15 deletions
diff --git a/src/gui/mainwindow.py b/src/gui/mainwindow.py index fcf4b4c..f6de763 100644 --- a/src/gui/mainwindow.py +++ b/src/gui/mainwindow.py @@ -10,7 +10,7 @@ from PIL import Image from queue import Queue import sys import os -import atexit +import signal import filecmp import time import logging @@ -74,9 +74,6 @@ class MainWindow(QtWidgets.QMainWindow): self.autosavePath = os.path.join(self.dataDir, 'autosave.avp') self.settings = Core.settings - # Register clean-up functions - atexit.register(self.cleanUp) - # Create stack of undoable user actions self.undoStack = QtWidgets.QUndoStack(self) undoLimit = self.settings.value("pref_undoLimit") @@ -94,15 +91,18 @@ class MainWindow(QtWidgets.QMainWindow): log.debug('Starting preview thread') self.previewQueue = Queue() self.previewThread = QtCore.QThread(self) - self.previewWorker = preview_thread.Worker(self, self.previewQueue) - self.previewWorker.error.connect(self.previewWindow.threadError) + self.previewWorker = preview_thread.Worker( + self.core, + self.settings, + self.previewQueue + ) self.previewWorker.moveToThread(self.previewThread) + self.newTask.connect(self.previewWorker.createPreviewImage) + self.processTask.connect(self.previewWorker.process) + self.previewWorker.error.connect(self.previewWindow.threadError) self.previewWorker.imageCreated.connect(self.showPreviewImage) self.previewThread.start() - self.previewThread.finished.connect( - lambda: - log.critical('PREVIEW THREAD DIED! This should never happen.') - ) + self.previewThread.finished.connect(lambda: log.info('Preview thread finished.')) timeout = 500 log.debug( @@ -429,6 +429,9 @@ class MainWindow(QtWidgets.QMainWindow): "Ctrl+Alt+Shift+A", self, lambda: log.debug(repr(self)) ) + # Close MainWindow when receiving Ctrl+C from terminal + signal.signal(signal.SIGINT, lambda *args: self.close()) + def __repr__(self): return ( '%s\n' @@ -441,15 +444,12 @@ class MainWindow(QtWidgets.QMainWindow): ) ) - def cleanUp(self, *args): + def closeEvent(self, event): log.info('Ending the preview thread') self.timer.stop() self.previewThread.quit() self.previewThread.wait() - - def terminate(self, *args): - self.cleanUp() - sys.exit(0) + return super().closeEvent(event) @disableWhenOpeningProject def updateWindowTitle(self): |
