From 6623aa83dfb64ee9890f84beed1ec6085a73f50f Mon Sep 17 00:00:00 2001 From: wyzula-jan Date: Tue, 25 Jun 2024 21:16:57 +0200 Subject: [PATCH] feat(jupyter_console): plugin added for QtDesigner --- .../jupyter_console/jupyter_console.py | 26 +++++----- .../jupyter_console/jupyter_console.pyproject | 3 ++ .../jupyter_console/jupyter_console_plugin.py | 51 +++++++++++++++++++ .../register_jupyter_console.py | 15 ++++++ 4 files changed, 81 insertions(+), 14 deletions(-) create mode 100644 bec_widgets/widgets/jupyter_console/jupyter_console.pyproject create mode 100644 bec_widgets/widgets/jupyter_console/jupyter_console_plugin.py create mode 100644 bec_widgets/widgets/jupyter_console/register_jupyter_console.py diff --git a/bec_widgets/widgets/jupyter_console/jupyter_console.py b/bec_widgets/widgets/jupyter_console/jupyter_console.py index b9c2e8e8..f09cf2bd 100644 --- a/bec_widgets/widgets/jupyter_console/jupyter_console.py +++ b/bec_widgets/widgets/jupyter_console/jupyter_console.py @@ -2,16 +2,16 @@ from bec_ipython_client.main import BECIPythonClient from qtconsole.inprocess import QtInProcessKernelManager from qtconsole.manager import QtKernelManager from qtconsole.rich_jupyter_widget import RichJupyterWidget -from qtpy.QtWidgets import QApplication, QMainWindow +from qtpy.QtWidgets import QApplication class BECJupyterConsole(RichJupyterWidget): # pragma: no cover: - def __init__(self, inprocess: bool = False): - super().__init__() + def __init__(self, parent=None, inprocess=True): + super().__init__(parent=parent) - self.inprocess = None + self.inprocess = inprocess - self.kernel_manager, self.kernel_client = self._init_kernel(inprocess=inprocess) + self.kernel_manager, self.kernel_client = self._init_kernel(inprocess=self.inprocess) self.set_default_style("linux") self._init_bec() @@ -61,12 +61,10 @@ class BECJupyterConsole(RichJupyterWidget): # pragma: no cover: self.kernel_manager.shutdown_kernel() -if __name__ == "__main__": # pragma: no cover - import sys - - app = QApplication(sys.argv) - win = QMainWindow() - win.setCentralWidget(BECJupyterConsole(True)) - win.show() - - sys.exit(app.exec_()) +# if __name__ == "__main__": # pragma: no cover +# import sys +# +# app = QApplication(sys.argv) +# win = BECJupyterConsole(inprocess=True) +# win.show() +# sys.exit(app.exec_()) diff --git a/bec_widgets/widgets/jupyter_console/jupyter_console.pyproject b/bec_widgets/widgets/jupyter_console/jupyter_console.pyproject new file mode 100644 index 00000000..cc02ad40 --- /dev/null +++ b/bec_widgets/widgets/jupyter_console/jupyter_console.pyproject @@ -0,0 +1,3 @@ +{ + "files": ["jupyter_console.py"] +} diff --git a/bec_widgets/widgets/jupyter_console/jupyter_console_plugin.py b/bec_widgets/widgets/jupyter_console/jupyter_console_plugin.py new file mode 100644 index 00000000..1f471e6d --- /dev/null +++ b/bec_widgets/widgets/jupyter_console/jupyter_console_plugin.py @@ -0,0 +1,51 @@ +from qtpy.QtDesigner import QDesignerCustomWidgetInterface +from qtpy.QtGui import QIcon + +from bec_widgets.widgets.jupyter_console.jupyter_console import BECJupyterConsole + +DOM_XML = """ + + + + +""" + + +class BECJupyterConsolePlugin(QDesignerCustomWidgetInterface): # pragma: no cover + def __init__(self): + super().__init__() + self._form_editor = None + + def createWidget(self, parent): + t = BECJupyterConsole(parent) + return t + + def domXml(self): + return DOM_XML + + def group(self): + return "" + + def icon(self): + return QIcon() + + def includeFile(self): + return "bec_jupyter" + + def initialize(self, form_editor): + self._form_editor = form_editor + + def isContainer(self): + return False + + def isInitialized(self): + return self._form_editor is not None + + def name(self): + return "BECJupyterConsole" + + def toolTip(self): + return "BECJupyterConsole widget" + + def whatsThis(self): + return self.toolTip() diff --git a/bec_widgets/widgets/jupyter_console/register_jupyter_console.py b/bec_widgets/widgets/jupyter_console/register_jupyter_console.py new file mode 100644 index 00000000..3fb1d5ee --- /dev/null +++ b/bec_widgets/widgets/jupyter_console/register_jupyter_console.py @@ -0,0 +1,15 @@ +def main(): # pragma: no cover + from qtpy import PYSIDE6 + + if not PYSIDE6: + print("PYSIDE6 is not available in the environment. Cannot patch designer.") + return + from PySide6.QtDesigner import QPyDesignerCustomWidgetCollection + + from bec_widgets.widgets.jupyter_console.jupyter_console_plugin import BECJupyterConsolePlugin + + QPyDesignerCustomWidgetCollection.addCustomWidget(BECJupyterConsolePlugin()) + + +if __name__ == "__main__": # pragma: no cover + main()