Source code for pymodaq_gui.plotting.data_viewers.viewer2D_basic

from typing import Union

from qtpy import QtCore, QtWidgets
from qtpy.QtCore import QObject, Slot, Signal
import sys
import pyqtgraph as pg
import numpy as np
from easydict import EasyDict as edict

from pymodaq_gui.plotting.widgets import ImageWidget
from pymodaq_gui.plotting.data_viewers.viewer import ViewerBase
from pymodaq_data.data import DataRaw
from pymodaq_gui.plotting.items.image import UniformImageItem, SpreadImageItem


[docs] class Viewer2DBasic(ViewerBase): """Very Basic 2D Viewer used as a view to add Image Items into it and use the image object directly Not meant to plot directly data, see Viewer2D for that See Also -------- Navigator, UniformImageItem, SpreadImageItem """ def __init__(self, parent: QtWidgets.QWidget = None, **kwargs): super().__init__(parent, **kwargs) self.scaling_options = edict(scaled_xaxis=edict(label="", units=None, offset=0, scaling=1), scaled_yaxis=edict(label="", units=None, offset=0, scaling=1)) self.setup_ui()
[docs] def scale_axis(self, xaxis, yaxis): return xaxis * self.scaling_options.scaled_xaxis.scaling + self.scaling_options.scaled_xaxis.offset, yaxis * self.scaling_options.scaled_yaxis.scaling + self.scaling_options.scaled_yaxis.offset
[docs] @Slot(float, float) def double_clicked(self, posx, posy): self.sig_double_clicked.emit(posx, posy)
[docs] def setup_ui(self): vlayout = QtWidgets.QVBoxLayout() hsplitter = QtWidgets.QSplitter(QtCore.Qt.Horizontal) self.parent.setLayout(vlayout) vlayout.addWidget(hsplitter) self.image_widget = ImageWidget() hsplitter.addWidget(self.image_widget) self.scaled_xaxis = self.image_widget.add_scaled_axis('top') self.scaled_yaxis = self.image_widget.add_scaled_axis('right') # self.scaled_xaxis.linkToView(self.image_widget.view) # self.scaled_yaxis.linkToView(self.image_widget.view) # self.image_widget.plotitem.layout.addItem(self.scaled_xaxis, *(1, 1)) # self.image_widget.plotitem.layout.addItem(self.scaled_yaxis, *(2, 2)) self.image_widget.view.sig_double_clicked.connect(self.double_clicked) # histograms self.histo_widget = QtWidgets.QWidget() histo_layout = QtWidgets.QHBoxLayout() self.histo_widget.setLayout(histo_layout) self.histogram_red = pg.HistogramLUTWidget() self.histogram_green = pg.HistogramLUTWidget() self.histogram_blue = pg.HistogramLUTWidget() self.histogram_adaptive = pg.HistogramLUTWidget() Ntick = 3 colors_red = [(int(r), 0, 0) for r in np.linspace(0, 255, Ntick)] colors_green = [(0, int(g), 0) for g in np.linspace(0, 255, Ntick)] colors_blue = [(0, 0, int(b)) for b in np.linspace(0, 255, Ntick)] colors_adaptive = [(int(b), int(b), int(b)) for b in np.linspace(0, 255, Ntick)] cmap_red = pg.ColorMap(pos=np.linspace(0.0, 1.0, Ntick), color=colors_red) cmap_green = pg.ColorMap(pos=np.linspace(0.0, 1.0, Ntick), color=colors_green) cmap_blue = pg.ColorMap(pos=np.linspace(0.0, 1.0, Ntick), color=colors_blue) cmap_adaptive = pg.ColorMap(pos=np.linspace(0.0, 1.0, Ntick), color=colors_adaptive) self.histogram_red.gradient.setColorMap(cmap_red) self.histogram_green.gradient.setColorMap(cmap_green) self.histogram_blue.gradient.setColorMap(cmap_blue) self.histogram_adaptive.gradient.setColorMap(cmap_adaptive) histo_layout.addWidget(self.histogram_red) histo_layout.addWidget(self.histogram_green) histo_layout.addWidget(self.histogram_blue) histo_layout.addWidget(self.histogram_adaptive) hsplitter.addWidget(self.histo_widget)
def _show_data(self, data: DataRaw): """This basic viewer is not meant to plot data directly """ ...
[docs] def set_aspect_ratio(self, status=True): self.image_widget.plotitem.vb.setAspectLocked(lock=status, ratio=1)
@property def plotitem(self): return self.image_widget.plotitem @property def histograms(self): return [self.histogram_red, self.histogram_green, self.histogram_blue]
[docs] def add_image_item(self, image: Union[SpreadImageItem, UniformImageItem], histogram: pg.HistogramLUTWidget = None): """Adds an image item to this viewer plotitem Links it to an existing histogram """ self.plotitem.addItem(image) if histogram in self.histograms: histogram.item.setImageItem(image)
if __name__ == '__main__': # pragma: no cover from pymodaq_gui.plotting.items.image import SpreadImageItem from qtpy import QtSvg, QtGui app = QtWidgets.QApplication(sys.argv) form = QtWidgets.QWidget() prog = Viewer2DBasic(form) img = SpreadImageItem() prog.image_widget.plotItem.addItem(img) svg_item = QtSvg.QGraphicsSvgItem() svg_renderer = QtSvg.QSvgRenderer( r'C:\Users\weber\Labo\Projet-Dossier candidature\Technical project\GDSII\wafer.svg') svg_item.setSharedRenderer(svg_renderer) form.show() data = np.load('../../../resources/triangulation_data.npy') img.setImage(data) prog.image_widget.plotitem.addItem(svg_item) curr_size = svg_renderer.defaultSize() real_size = svg_item.boundingRect() # tr = QtGui.QTransform() # tr.translate(rect.left(), rect.top()) # tr.scale(300/rect.width(), 300/rect.height()) # svg_item.setTransform(tr) pass sys.exit(app.exec_())