Source code for pymodaq_gui.utils.widgets.lcd

from typing import List, Sequence

import numpy as np

from qtpy import QtWidgets
from qtpy.QtCore import QObject, QThread
from pymodaq_gui.plotting.data_viewers.viewer0D import Viewer0D
from pymodaq_data.data import DataRaw
import sys


[docs] class LCD(QObject): def __init__(self, parent: QtWidgets.QWidget, Nvals=0, labels: Sequence[str] = None, digits=3, show_graph=True, **kwargs): super().__init__() self.Nvals = Nvals self.labels = labels if labels is not None else ['CH{:d}'.format(ind) for ind in range(self.Nvals)] self.parent = parent self.viewer0D = None self.digits = digits self.show_graph = show_graph self.setupui() self.viewer_widget.setVisible(self.show_graph)
[docs] def setvalues(self, values: List[np.ndarray], show_graph: bool = None): """ display values on lcds Parameters ---------- values: list of 0D ndarray show_graph: bool set the graph visibility Returns ------- """ if show_graph is None: show_graph = self.show_graph while len(values) < self.Nvals: values.append(np.array([0.])) if len(values) > self.Nvals: values = values[:self.Nvals] vals = [] for ind, val in enumerate(values): self.lcds[ind].display(val[0]) vals.append(val) self.viewer_widget.setVisible(show_graph) if show_graph: self.viewer0D.show_data(DataRaw(name='LCD', data=values))
[docs] def setupui(self): while len(self.labels) < self.Nvals: self.labels.append('') vlayout = QtWidgets.QVBoxLayout() hsplitter = QtWidgets.QSplitter() vlayout.addWidget(hsplitter) self.parent.setLayout(vlayout) self.viewer_widget = QtWidgets.QWidget() self.viewer0D = Viewer0D(self.viewer_widget) self.viewer0D.labels = self.labels vlayout = QtWidgets.QVBoxLayout() lcd_layouts = [] labels = [] self.lcds = [] for ind in range(self.Nvals): lcd_layouts.append(QtWidgets.QVBoxLayout()) labels.append(QtWidgets.QLabel(self.labels[ind])) labels[-1].setSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Maximum) self.lcds.append(QtWidgets.QLCDNumber()) self.lcds[-1].setDigitCount(self.digits) lcd_layouts[-1].addWidget(labels[-1]) lcd_layouts[-1].addWidget(self.lcds[-1]) vlayout.addLayout(lcd_layouts[-1]) if ind != self.Nvals - 1: hFrame = QtWidgets.QFrame() hFrame.setFrameShape(QtWidgets.QFrame.HLine) vlayout.addWidget(hFrame) lcd_widget = QtWidgets.QWidget() lcd_widget.setLayout(vlayout) hsplitter.addWidget(lcd_widget) hsplitter.addWidget(self.viewer_widget) self.parent.resize(800, 500) hsplitter.setSizes([400, 300])
if __name__ == '__main__': from pymodaq_utils.math_utils import gauss1D import numpy as np x = np.linspace(0, 200, 201) y1 = 100 * gauss1D(x, 75, 100) y2 = gauss1D(x, 120, 100, 2) app = QtWidgets.QApplication(sys.argv) widget = QtWidgets.QWidget() prog = LCD(widget, Nvals=2, show_graph=False) widget.show() for ind in range(len(x)): prog.setvalues([np.atleast_1d(y1[ind]), np.atleast_1d(y2[ind])]) QtWidgets.QApplication.processEvents() QThread.msleep(100) sys.exit(app.exec())