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

feat: placeholders initialised

This commit is contained in:
wyzula-jan
2023-10-11 17:39:25 +02:00
parent 483e18259a
commit 75af0404b3
3 changed files with 252 additions and 0 deletions

View File

@ -0,0 +1,70 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1433</width>
<height>689</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralwidget">
<layout class="QGridLayout" name="gridLayout">
<item row="1" column="1">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Table </string>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Plot 2</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QGraphicsView" name="glw_1"/>
</item>
<item row="2" column="1">
<widget class="QTableWidget" name="tableWidget"/>
</item>
<item row="2" column="2">
<widget class="QGraphicsView" name="glw_2"/>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Plot 1</string>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1433</width>
<height>24</height>
</rect>
</property>
<widget class="QMenu" name="menuSettings">
<property name="title">
<string>Settings</string>
</property>
</widget>
<addaction name="menuSettings"/>
</widget>
<widget class="QStatusBar" name="statusbar"/>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -0,0 +1,38 @@
import os
from PyQt5 import uic
from PyQt5.QtWidgets import QMainWindow, QApplication, QVBoxLayout
from bec_widgets.widgets.device_monitor import BECDeviceMonitor
class ModularApp(QMainWindow):
def __init__(self, client=None, parent=None):
super(ModularApp, self).__init__(parent)
# Client and device manager from BEC
self.client = bec_dispatcher.client if client is None else client
# Loading UI
current_path = os.path.dirname(__file__)
uic.loadUi(os.path.join(current_path, "modular.ui"), self)
self._init_plots()
def _init_plots(self):
self.glw_1_layout = QVBoxLayout(self.glw_1) # Create a new QVBoxLayout
self.bec_device_monitor = BECDeviceMonitor(parent=self)
self.glw_1_layout.addWidget(self.bec_device_monitor) # Add BECDeviceMonitor to the layout
if __name__ == "__main__":
from bec_widgets.bec_dispatcher import bec_dispatcher
# BECclient global variables
client = bec_dispatcher.client
client.start()
app = QApplication([])
modularApp = ModularApp(client=client)
window = modularApp
window.show()
app.exec_()

View File

@ -0,0 +1,144 @@
import pyqtgraph as pg
from PyQt5 import QtCore
from PyQt5.QtCore import pyqtSignal, pyqtSlot
from PyQt5.QtWidgets import QApplication
from pyqtgraph import mkPen, mkBrush
from bec_widgets.qt_utils import Crosshair, Colors
config_simple = {
"plot_settings": {
"background_color": "white",
"num_columns": 1,
"colormap": "plasma",
"scan_types": False,
},
"plot_data": {
"plot_name": "BPM4i plots vs samx",
"x": {
"label": "Motor Y",
"signals": [{"name": "samx"}], # Entry is missing
},
"y": {
"label": "bpm4i",
"signals": [{"name": "bpm4i"}], # Entry is missing
},
},
}
class BECDeviceMonitor(pg.GraphicsLayoutWidget):
update_signal = pyqtSignal()
def __init__(self, config: dict = config_simple, parent=None): # , client=None, parent=None):
super(BECDeviceMonitor, self).__init__(parent=None)
# Client and device manager from BEC
# self.client = bec_dispatcher.client if client is None else client
# self.dev = self.client.device_manager.devices
# Current configuration
self.config = config
# Displayed Data
self.data = {}
self.crosshairs = None
self.plots = None
self.curves_data = None
self.grid_coordinates = None
self.scanID = None
# Connect the update signal to the update plot method #TODO enable when update is fixed
# self.proxy_update_plot = pg.SignalProxy(
# self.update_signal, rateLimit=25, slot=self.update_plot
# )
# Init UI
self._init_config()
self._init_plot()
# self._init_curves()
def _init_config(self):
# Separate configs
self.plot_settings = self.config.get("plot_settings", {})
self.plot_data_config = self.config.get("plot_data", {})
def _init_plot(self):
self.clear()
self.plots = {}
# self.grid_coordinates = {} # TODO will be extended in the next version
plot_config = self.plot_data_config
# TODO here will go for cycle for multiple plots
# Plot Settings
plot_name = plot_config.get("plot_name", "")
x_label = plot_config["x"].get("label", "")
y_label = plot_config["y"].get("label", "")
plot = self.addPlot(title=plot_name)
plot.setLabel("bottom", x_label)
plot.setLabel("left", y_label)
# Adding some data to plot for testing
plot.plot([1, 2, 3, 4, 5], [5, 4, 3, 2, 1])
self.plots[plot_name] = plot
# def _init_curves(self):
# self.curves_data = {}
# row_labels = []
#
# plot_config = self.plot_data_config # TODO will be change to loop as in extreme.py
#
# plot_name = self.plot_data_config.get("plot_name", "")
# plot = self.plots[plot_name]
# plot.clear()
#
# y_config = plot_config["y"]["signals"]
# colors_ys = Colors.golden_angle_color(
# colormap=self.plot_settings["colormap"], num=len(y_config)
# )
#
# curve_list = []
# for i, (y_config, color) in enumerate(zip(y_config, colors_ys)):
# # print(y_config)
# y_name = y_config["name"]
# y_entries = y_config.get("entry", [y_name])
#
# if not isinstance(y_entries, list):
# y_entries = [y_entries]
#
# for y_entry in y_entries:
# user_color = self.user_colors.get((plot_name, y_name, y_entry), None)
# color_to_use = user_color if user_color else color
#
# pen_curve = mkPen(color=color_to_use, width=2, style=QtCore.Qt.DashLine)
# brush_curve = mkBrush(color=color_to_use)
#
# curve_data = pg.PlotDataItem(
# symbolSize=5,
# symbolBrush=brush_curve,
# pen=pen_curve,
# skipFiniteCheck=True,
# name=f"{y_name} ({y_entry})",
# )
#
# curve_list.append((y_name, y_entry, curve_data))
# plot.addItem(curve_data)
# row_labels.append(f"{y_name} ({y_entry}) - {plot_name}")
#
# self.curves_data[plot_name] = curve_list
def update_plot(self):
...
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
monitor = BECDeviceMonitor()
monitor.show()
sys.exit(app.exec_())