mirror of
https://github.com/dcs-retribution/dcs-retribution.git
synced 2025-11-10 15:41:24 +00:00
This appears to be incompatible with pyinstaller. I get the following when trying to run the executable generated with pyside6: ``` Traceback (most recent call last): File "qt_ui\main.py", line 29, in <module> File "PyInstaller\loader\pyimod03_importers.py", line 476, in exec_module File "qt_ui\windows\QLiberationWindow.py", line 28, in <module> File "PyInstaller\loader\pyimod03_importers.py", line 476, in exec_module File "qt_ui\widgets\map\QLiberationMap.py", line 11, in <module> ImportError: could not import module 'PySide6.QtPrintSupport' ```
43 lines
1.5 KiB
Python
43 lines
1.5 KiB
Python
# From https://timlehr.com/python-exception-hooks-with-qt-message-box/
|
|
import logging
|
|
import sys
|
|
import traceback
|
|
|
|
from PySide2.QtCore import Signal, QObject
|
|
from PySide2.QtWidgets import QMessageBox, QApplication
|
|
|
|
|
|
class UncaughtExceptionHandler(QObject):
|
|
_exception_caught = Signal(str, str)
|
|
|
|
def __init__(self, parent: QObject):
|
|
super().__init__(parent)
|
|
sys.excepthook = self.exception_hook
|
|
# Use a signal so that the message box always comes from the main thread.
|
|
self._exception_caught.connect(self.show_exception_box)
|
|
|
|
def exception_hook(self, exc_type, exc_value, exc_traceback):
|
|
if issubclass(exc_type, KeyboardInterrupt):
|
|
# Ignore keyboard interrupt to support console applications.
|
|
sys.__excepthook__(exc_type, exc_value, exc_traceback)
|
|
return
|
|
|
|
logging.exception(
|
|
"Uncaught exception", exc_info=(exc_type, exc_value, exc_traceback)
|
|
)
|
|
self._exception_caught.emit(
|
|
str(exc_value),
|
|
"".join(traceback.format_exception(exc_type, exc_value, exc_traceback)),
|
|
)
|
|
|
|
def show_exception_box(self, message: str, exception: str) -> None:
|
|
if QApplication.instance() is not None:
|
|
QMessageBox().critical(
|
|
self.parent(),
|
|
"An unexpected error occurred",
|
|
"\n".join([message, "", exception]),
|
|
QMessageBox.Ok,
|
|
)
|
|
else:
|
|
logging.critical("No QApplication instance available.")
|