diff --git a/cura/CrashHandler.py b/cura/CrashHandler.py new file mode 100644 index 0000000000..1df1ab773e --- /dev/null +++ b/cura/CrashHandler.py @@ -0,0 +1,41 @@ +import sys +import platform +import traceback +import webbrowser + +from PyQt5.QtCore import QT_VERSION_STR, PYQT_VERSION_STR +from PyQt5.QtWidgets import QDialog, QDialogButtonBox, QVBoxLayout, QLabel, QTextEdit + +def show(): + dialog = QDialog() + dialog.setWindowTitle("Oops!") + + layout = QVBoxLayout(dialog) + + label = QLabel(dialog) + layout.addWidget(label) + label.setText("
An uncaught exception has occurred!
Please use the information below to post a bug report at http://github.com/Ultimaker/Cura/issues
") + + textarea = QTextEdit(dialog) + layout.addWidget(textarea) + + try: + from UM.Application import Application + version = Application.getInstance().getVersion() + except: + version = "Unknown" + + trace = "".join(traceback.format_exception(sys.exc_info()[0], sys.exc_info()[1], sys.exc_info()[2])) + + crash_info = "Version: {0}\nPlatform: {1}\nQt: {2}\nPyQt: {3}\n\nException:\n{4}" + crash_info = crash_info.format(version, platform.platform(), QT_VERSION_STR, PYQT_VERSION_STR, trace) + + textarea.setText(crash_info) + + buttons = QDialogButtonBox(QDialogButtonBox.Close, dialog) + layout.addWidget(buttons) + buttons.addButton("Open Web Page", QDialogButtonBox.HelpRole) + buttons.rejected.connect(lambda: dialog.close()) + buttons.helpRequested.connect(lambda: webbrowser.open("http://github.com/Ultimaker/Cura/issues")) + + dialog.exec_() diff --git a/cura_app.py b/cura_app.py index cfe99284b3..35ea0375b6 100755 --- a/cura_app.py +++ b/cura_app.py @@ -3,7 +3,12 @@ # Copyright (c) 2015 Ultimaker B.V. # Cura is released under the terms of the AGPLv3 or higher. -import cura.CuraApplication +try: + import cura.CuraApplication + + app = cura.CuraApplication.CuraApplication.getInstance() + app.run() +except Exception as e: + import cura.CrashHandler + cura.CrashHandler.show() -app = cura.CuraApplication.CuraApplication.getInstance() -app.run()