gui.py 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import logging, sys, traceback, tempfile, shutil, os, zipfile, pathlib
  2. from PyQt5.QtWidgets import *
  3. from PyQt5.QtGui import *
  4. from PyQt5.QtCore import *
  5. from protolib import get_app_root
  6. from protolib.gui_utils.pyqt5_messageboxes import show_critical_messagebox
  7. from windows.main import MainWindow
  8. from windows.crash_handler import CrashHandlerWindow
  9. from config import dump_config
  10. logger = logging.getLogger(__name__)
  11. def excepthook(exc_type, exc_value, exc_traceback):
  12. error_msg = traceback.format_exception(exc_type, exc_value, exc_traceback)
  13. error_msg = ''.join(error_msg)
  14. print(error_msg)
  15. QApplication.closeAllWindows()
  16. window = CrashHandlerWindow(error_msg)
  17. window.show()
  18. # https://stackoverflow.com/questions/19462112/pyqt-wait-until-widget-closes
  19. loop = QEventLoop()
  20. window.exiting.connect(loop.quit)
  21. window.destroyed.connect(loop.quit)
  22. loop.exec() # wait ...
  23. sys.exit(1)
  24. sys.excepthook = excepthook
  25. logger.info('Graphical crash handler installed')
  26. def main(args):
  27. app = QApplication(sys.argv)
  28. window = MainWindow(args)
  29. window.show()
  30. exit_code = app.exec()
  31. dump_config(window.get_tab())
  32. sys.exit(exit_code)