mirror of
https://github.com/bec-project/bec_widgets.git
synced 2025-07-14 03:31:50 +02:00
feat(widgets/console): BECJupyterConsole added
This commit is contained in:
@ -12,22 +12,22 @@ from qtpy.QtWidgets import QApplication, QVBoxLayout, QWidget
|
|||||||
from bec_widgets.utils import BECDispatcher, UILoader
|
from bec_widgets.utils import BECDispatcher, UILoader
|
||||||
from bec_widgets.widgets import BECFigure
|
from bec_widgets.widgets import BECFigure
|
||||||
from bec_widgets.widgets.dock.dock_area import BECDockArea
|
from bec_widgets.widgets.dock.dock_area import BECDockArea
|
||||||
|
from bec_widgets.widgets.jupyter_console.jupyter_console import BECJupyterConsole
|
||||||
|
|
||||||
|
# class JupyterConsoleWidget(RichJupyterWidget): # pragma: no cover:
|
||||||
class JupyterConsoleWidget(RichJupyterWidget): # pragma: no cover:
|
# def __init__(self):
|
||||||
def __init__(self):
|
# super().__init__()
|
||||||
super().__init__()
|
#
|
||||||
|
# self.kernel_manager = QtInProcessKernelManager()
|
||||||
self.kernel_manager = QtInProcessKernelManager()
|
# self.kernel_manager.start_kernel(show_banner=False)
|
||||||
self.kernel_manager.start_kernel(show_banner=False)
|
# self.kernel_client = self.kernel_manager.client()
|
||||||
self.kernel_client = self.kernel_manager.client()
|
# self.kernel_client.start_channels()
|
||||||
self.kernel_client.start_channels()
|
#
|
||||||
|
# self.kernel_manager.kernel.shell.push({"np": np, "pg": pg})
|
||||||
self.kernel_manager.kernel.shell.push({"np": np, "pg": pg})
|
#
|
||||||
|
# def shutdown_kernel(self):
|
||||||
def shutdown_kernel(self):
|
# self.kernel_client.stop_channels()
|
||||||
self.kernel_client.stop_channels()
|
# self.kernel_manager.shutdown_kernel()
|
||||||
self.kernel_manager.shutdown_kernel()
|
|
||||||
|
|
||||||
|
|
||||||
class JupyterConsoleWindow(QWidget): # pragma: no cover:
|
class JupyterConsoleWindow(QWidget): # pragma: no cover:
|
||||||
@ -45,25 +45,25 @@ class JupyterConsoleWindow(QWidget): # pragma: no cover:
|
|||||||
self.safe_close = False
|
self.safe_close = False
|
||||||
|
|
||||||
# console push
|
# console push
|
||||||
self.console.kernel_manager.kernel.shell.push(
|
if self.console.inprocess is True:
|
||||||
{
|
self.console.kernel_manager.kernel.shell.push(
|
||||||
"fig": self.figure,
|
{
|
||||||
"dock": self.dock,
|
"np": np,
|
||||||
"w1": self.w1,
|
"pg": pg,
|
||||||
"w2": self.w2,
|
"fig": self.figure,
|
||||||
"w3": self.w3,
|
"dock": self.dock,
|
||||||
"d0": self.d0,
|
"w1": self.w1,
|
||||||
"d1": self.d1,
|
"w2": self.w2,
|
||||||
"d2": self.d2,
|
"w3": self.w3,
|
||||||
"fig0": self.fig0,
|
"d0": self.d0,
|
||||||
"fig1": self.fig1,
|
"d1": self.d1,
|
||||||
"fig2": self.fig2,
|
"d2": self.d2,
|
||||||
"bar": self.bar,
|
"fig0": self.fig0,
|
||||||
"bec": self.figure.client,
|
"fig1": self.fig1,
|
||||||
"scans": self.figure.client.scans,
|
"fig2": self.fig2,
|
||||||
"dev": self.figure.client.device_manager.devices,
|
"bar": self.bar,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
def _init_ui(self):
|
def _init_ui(self):
|
||||||
# Plotting window
|
# Plotting window
|
||||||
@ -82,9 +82,8 @@ class JupyterConsoleWindow(QWidget): # pragma: no cover:
|
|||||||
self._init_dock()
|
self._init_dock()
|
||||||
|
|
||||||
self.console_layout = QVBoxLayout(self.ui.widget_console)
|
self.console_layout = QVBoxLayout(self.ui.widget_console)
|
||||||
self.console = JupyterConsoleWidget()
|
self.console = BECJupyterConsole(inprocess=True)
|
||||||
self.console_layout.addWidget(self.console)
|
self.console_layout.addWidget(self.console)
|
||||||
self.console.set_default_style("linux")
|
|
||||||
|
|
||||||
def _init_figure(self):
|
def _init_figure(self):
|
||||||
self.figure.plot(x_name="samx", y_name="bpm4d")
|
self.figure.plot(x_name="samx", y_name="bpm4d")
|
||||||
@ -144,7 +143,7 @@ if __name__ == "__main__": # pragma: no cover
|
|||||||
app = QApplication(sys.argv)
|
app = QApplication(sys.argv)
|
||||||
app.setApplicationName("Jupyter Console")
|
app.setApplicationName("Jupyter Console")
|
||||||
app.setApplicationDisplayName("Jupyter Console")
|
app.setApplicationDisplayName("Jupyter Console")
|
||||||
qdarktheme.setup_theme("auto")
|
# qdarktheme.setup_theme("auto")
|
||||||
icon = QIcon()
|
icon = QIcon()
|
||||||
icon.addFile(os.path.join(module_path, "assets", "terminal_icon.png"), size=QSize(48, 48))
|
icon.addFile(os.path.join(module_path, "assets", "terminal_icon.png"), size=QSize(48, 48))
|
||||||
app.setWindowIcon(icon)
|
app.setWindowIcon(icon)
|
||||||
|
0
bec_widgets/widgets/jupyter_console/__init__.py
Normal file
0
bec_widgets/widgets/jupyter_console/__init__.py
Normal file
72
bec_widgets/widgets/jupyter_console/jupyter_console.py
Normal file
72
bec_widgets/widgets/jupyter_console/jupyter_console.py
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
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
|
||||||
|
|
||||||
|
|
||||||
|
class BECJupyterConsole(RichJupyterWidget): # pragma: no cover:
|
||||||
|
def __init__(self, inprocess: bool = False):
|
||||||
|
super().__init__()
|
||||||
|
|
||||||
|
self.inprocess = None
|
||||||
|
|
||||||
|
self.kernel_manager, self.kernel_client = self._init_kernel(inprocess=inprocess)
|
||||||
|
self.set_default_style("linux")
|
||||||
|
self._init_bec()
|
||||||
|
|
||||||
|
def _init_kernel(self, inprocess: bool = False, kernel_name: str = "python3"):
|
||||||
|
self.inprocess = inprocess
|
||||||
|
if inprocess is True:
|
||||||
|
print("starting inprocess kernel")
|
||||||
|
kernel_manager = QtInProcessKernelManager()
|
||||||
|
else:
|
||||||
|
kernel_manager = QtKernelManager(kernel_name=kernel_name)
|
||||||
|
kernel_manager.start_kernel()
|
||||||
|
kernel_client = kernel_manager.client()
|
||||||
|
kernel_client.start_channels()
|
||||||
|
return kernel_manager, kernel_client
|
||||||
|
|
||||||
|
def _init_bec(self):
|
||||||
|
if self.inprocess is True:
|
||||||
|
self._init_bec_inprocess()
|
||||||
|
else:
|
||||||
|
self._init_bec_kernel()
|
||||||
|
|
||||||
|
def _init_bec_inprocess(self):
|
||||||
|
self.client = BECIPythonClient()
|
||||||
|
self.client.start()
|
||||||
|
|
||||||
|
self.kernel_manager.kernel.shell.push(
|
||||||
|
{
|
||||||
|
"bec": self.client,
|
||||||
|
"dev": self.client.device_manager.devices,
|
||||||
|
"scans": self.client.scans,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
def _init_bec_kernel(self):
|
||||||
|
self.execute(
|
||||||
|
"""
|
||||||
|
from bec_ipython_client.main import BECIPythonClient
|
||||||
|
bec = BECIPythonClient()
|
||||||
|
bec.start()
|
||||||
|
dev = bec.device_manager.devices if bec else None
|
||||||
|
scans = bec.scans if bec else None
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
|
||||||
|
def shutdown_kernel(self):
|
||||||
|
self.kernel_client.stop_channels()
|
||||||
|
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_())
|
Reference in New Issue
Block a user