0
0
mirror of https://github.com/bec-project/bec_widgets.git synced 2025-07-14 11:41:49 +02:00

feat: modular_app.py, device_monitor.py, config_dialog.py linked together, plot configuration can be done through GUI

This commit is contained in:
wyzula-jan
2023-10-18 18:37:21 +02:00
committed by wyzula_j
parent 486ffa2505
commit bf2a09e630
6 changed files with 79 additions and 24 deletions

View File

@ -15,16 +15,40 @@
</property>
<widget class="QWidget" name="centralwidget">
<layout class="QGridLayout" name="gridLayout">
<item row="2" column="1">
<widget class="QGraphicsView" name="glw_2"/>
</item>
<item row="1" column="1">
<item row="1" column="2">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Plot Config 2</string>
</property>
</widget>
</item>
<item row="3" column="0" colspan="2">
<widget class="QGraphicsView" name="glw_1"/>
</item>
<item row="1" column="3">
<widget class="QPushButton" name="pushButton_setting_2">
<property name="text">
<string>Setting Plot 2</string>
</property>
</widget>
</item>
<item row="3" column="2" colspan="2">
<widget class="QGraphicsView" name="glw_2"/>
</item>
<item row="1" column="4">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Plot Scan Types = True</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QPushButton" name="pushButton_setting_1">
<property name="text">
<string>Setting Plot 1</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label">
<property name="text">
@ -32,19 +56,16 @@
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QGraphicsView" name="glw_1"/>
</item>
<item row="2" column="2">
<widget class="QGraphicsView" name="glw_3"/>
</item>
<item row="1" column="2">
<widget class="QLabel" name="label_2">
<item row="1" column="5">
<widget class="QPushButton" name="pushButton_setting_3">
<property name="text">
<string>Plot Scan Types = True</string>
<string>Setting Plot 3</string>
</property>
</widget>
</item>
<item row="3" column="4" colspan="2">
<widget class="QGraphicsView" name="glw_3"/>
</item>
</layout>
</widget>
<widget class="QMenuBar" name="menubar">
@ -53,7 +74,7 @@
<x>0</x>
<y>0</y>
<width>1433</width>
<height>24</height>
<height>37</height>
</rect>
</property>
<widget class="QMenu" name="menuSettings">

View File

@ -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

View File

@ -0,0 +1,2 @@
from .device_monitor import BECDeviceMonitor
from .config_dialog import ConfigDialog

View File

@ -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_()

View File

@ -132,14 +132,14 @@
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QPushButton" name="pushButton">
<widget class="QPushButton" name="pushButton_import">
<property name="text">
<string>Import</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_2">
<widget class="QPushButton" name="pushButton_export">
<property name="text">
<string>Export</string>
</property>

View File

@ -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):
"""