diff --git a/utils/gui/pyqt/error_popup/ErrorPopup.py b/utils/gui/pyqt/error_popup/ErrorPopup.py
new file mode 100644
index 0000000000000000000000000000000000000000..50e52a39e9a397a0aea26e517e75518d8330b445
--- /dev/null
+++ b/utils/gui/pyqt/error_popup/ErrorPopup.py
@@ -0,0 +1,32 @@
+from PyQt5 import QtCore, QtGui, QtWidgets
+from PyQt5.QtWidgets import QMessageBox
+
+class ErrorPopup(object):
+
+    def __init__(self,error_text,details = None,button_label = None,button_callback=None):
+        self.error_text = error_text
+        self.button_label = button_label
+        self.button_callback = button_callback
+        self.details = details
+
+
+    def show_popup(self):
+        msg = QMessageBox()
+        msg.setWindowTitle("Erreur")
+        msg.setText("Erreur: " + self.error_text)
+        msg.setIcon(QMessageBox.Critical)
+
+        if self.button_label is not None and self.button_callback is not None:
+            msg.setStandardButtons(QMessageBox.Cancel|QMessageBox.Retry)
+            msg.setDefaultButton(QMessageBox.Cancel)
+            msg.button(QMessageBox.Cancel).clicked.connect(msg.close)
+            msg.button(QMessageBox.Retry).setText(self.button_label)
+            msg.button(QMessageBox.Retry).clicked.connect(self.button_callback)
+        else:
+            msg.setStandardButtons(QMessageBox.Ok)
+            msg.setDefaultButton(QMessageBox.Ok)
+            msg.button(QMessageBox.Ok).clicked.connect(msg.close)
+        msg.setInformativeText(self.error_text)
+        if self.details is not None:
+            msg.setDetailedText(self.details)
+        msg.exec_()
\ No newline at end of file