From bf2a09e6307da63ecf02a1286095a19e5f1dcab4 Mon Sep 17 00:00:00 2001 From: wyzula-jan <133381102+wyzula-jan@users.noreply.github.com> Date: Wed, 18 Oct 2023 18:37:21 +0200 Subject: [PATCH] feat: modular_app.py, device_monitor.py, config_dialog.py linked together, plot configuration can be done through GUI --- bec_widgets/examples/modular_app/modular.ui | 49 +++++++++++++------ .../examples/modular_app/modular_app.py | 21 +++++++- bec_widgets/widgets/monitor/__init__.py | 2 + bec_widgets/widgets/monitor/config_dialog.py | 22 ++++++--- bec_widgets/widgets/monitor/config_dialog.ui | 4 +- bec_widgets/widgets/monitor/device_monitor.py | 5 ++ 6 files changed, 79 insertions(+), 24 deletions(-) diff --git a/bec_widgets/examples/modular_app/modular.ui b/bec_widgets/examples/modular_app/modular.ui index 73398ca6..0dd3a49d 100644 --- a/bec_widgets/examples/modular_app/modular.ui +++ b/bec_widgets/examples/modular_app/modular.ui @@ -15,16 +15,40 @@ - - - - + Plot Config 2 + + + + + + + Setting Plot 2 + + + + + + + + + + Plot Scan Types = True + + + + + + + Setting Plot 1 + + + @@ -32,19 +56,16 @@ - - - - - - - - + + - Plot Scan Types = True + Setting Plot 3 + + + @@ -53,7 +74,7 @@ 0 0 1433 - 24 + 37 diff --git a/bec_widgets/examples/modular_app/modular_app.py b/bec_widgets/examples/modular_app/modular_app.py index e933b4d0..64440625 100644 --- a/bec_widgets/examples/modular_app/modular_app.py +++ b/bec_widgets/examples/modular_app/modular_app.py @@ -3,7 +3,7 @@ import os from PyQt5 import uic from PyQt5.QtWidgets import QMainWindow, QApplication, QVBoxLayout -from bec_widgets.widgets.monitor.device_monitor import BECDeviceMonitor +from bec_widgets.widgets.monitor import BECDeviceMonitor, ConfigDialog config_1 = { "plot_settings": { @@ -171,6 +171,18 @@ class ModularApp(QMainWindow): self._init_plots() + # Config Dialog + self.config_dialog = ConfigDialog() + self.pushButton_setting_1.clicked.connect( + lambda: self.show_config_dialog(config_1, self.bec_device_monitor_1) + ) + self.pushButton_setting_2.clicked.connect( + lambda: self.show_config_dialog(config_2, self.bec_device_monitor_2) + ) + self.pushButton_setting_3.clicked.connect( + lambda: self.show_config_dialog(config_scan_mode, self.bec_device_monitor_3) + ) + def _init_plots(self): self.glw_1_layout = QVBoxLayout(self.glw_1) # Create a new QVBoxLayout self.bec_device_monitor_1 = BECDeviceMonitor(parent=self, config=config_1) @@ -184,6 +196,13 @@ class ModularApp(QMainWindow): self.bec_device_monitor_3 = BECDeviceMonitor(parent=self, config=config_scan_mode) self.glw_3_layout.addWidget(self.bec_device_monitor_3) # Add BECDeviceMonitor to the layout + def show_config_dialog(self, config, monitor): + # self.config_dialog.load_config(config) # Load the configuration into the dialog + self.config_dialog.config_updated.connect( + monitor.update_config + ) # Connect the signal to the monitor's slot + self.config_dialog.show() # Show the dialog + if __name__ == "__main__": from bec_widgets.bec_dispatcher import bec_dispatcher diff --git a/bec_widgets/widgets/monitor/__init__.py b/bec_widgets/widgets/monitor/__init__.py index e69de29b..1b2791a1 100644 --- a/bec_widgets/widgets/monitor/__init__.py +++ b/bec_widgets/widgets/monitor/__init__.py @@ -0,0 +1,2 @@ +from .device_monitor import BECDeviceMonitor +from .config_dialog import ConfigDialog diff --git a/bec_widgets/widgets/monitor/config_dialog.py b/bec_widgets/widgets/monitor/config_dialog.py index 13a7165c..5f4f77d8 100644 --- a/bec_widgets/widgets/monitor/config_dialog.py +++ b/bec_widgets/widgets/monitor/config_dialog.py @@ -1,4 +1,7 @@ +import os + from PyQt5 import uic +from PyQt5.QtCore import pyqtSignal from PyQt5.QtWidgets import ( QApplication, QWidget, @@ -11,11 +14,15 @@ from PyQt5.QtWidgets import ( QTableWidgetItem, ) -Ui_Form, BaseClass = uic.loadUiType("config_dialog.ui") -Tab_Ui_Form, Tab_BaseClass = uic.loadUiType("tab_template.ui") + +current_path = os.path.dirname(__file__) +Ui_Form, BaseClass = uic.loadUiType(os.path.join(current_path, "config_dialog.ui")) +Tab_Ui_Form, Tab_BaseClass = uic.loadUiType(os.path.join(current_path, "tab_template.ui")) -class MainApp(QWidget, Ui_Form): +class ConfigDialog(QWidget, Ui_Form): + config_updated = pyqtSignal(dict) + def __init__(self): super().__init__() self.setupUi(self) @@ -66,10 +73,10 @@ class MainApp(QWidget, Ui_Form): def get_configuration(self): config = { "plot_settings": { - "background_color": "black", + "background_color": self.comboBox_appearance.currentText(), "num_columns": self.spinBox.value(), - "colormap": self.comboBox_2.currentText(), - "scan_types": self.comboBox.currentText() == "Enabled", + "colormap": self.comboBox_colormap.currentText(), + "scan_types": self.comboBox_scanTypes.currentText() == "Enabled", }, "plot_data": [], } @@ -105,6 +112,7 @@ class MainApp(QWidget, Ui_Form): config["plot_data"].append(plot_config) print(config) + self.config_updated.emit(config) return config @staticmethod @@ -114,6 +122,6 @@ class MainApp(QWidget, Ui_Form): if __name__ == "__main__": app = QApplication([]) - main_app = MainApp() + main_app = ConfigDialog() main_app.show() app.exec_() diff --git a/bec_widgets/widgets/monitor/config_dialog.ui b/bec_widgets/widgets/monitor/config_dialog.ui index 946115d4..b984a4da 100644 --- a/bec_widgets/widgets/monitor/config_dialog.ui +++ b/bec_widgets/widgets/monitor/config_dialog.ui @@ -132,14 +132,14 @@ - + Import - + Export diff --git a/bec_widgets/widgets/monitor/device_monitor.py b/bec_widgets/widgets/monitor/device_monitor.py index b056c5d4..b6b27641 100644 --- a/bec_widgets/widgets/monitor/device_monitor.py +++ b/bec_widgets/widgets/monitor/device_monitor.py @@ -228,6 +228,11 @@ class BECDeviceMonitor(pg.GraphicsLayoutWidget): curve.setData(data_x, data_y) + @pyqtSlot(dict) + def update_config(self, config): + self.config = config + self._init_config() + @pyqtSlot(dict, dict) def on_scan_segment(self, msg, metadata): """