Source code for pymodaq_gui.plotting.widgets
# -*- coding: utf-8 -*-
"""
Created the 04/11/2022
@author: Sebastien Weber
"""
import pyqtgraph as pg
from qtpy import QtWidgets
from pymodaq_gui.plotting.utils.plot_utils import View_cust
from pymodaq_gui.plotting.items.axis_scaled import AXIS_POSITIONS, AxisItem_Scaled
[docs]
class ImageWidget(pg.GraphicsLayoutWidget):
"""this gives a layout to add imageitems.
"""
def __init__(self, parent=None, *args_plotitem, **kwargs_plotitem):
super().__init__(parent)
self.setupUI(*args_plotitem, **kwargs_plotitem)
[docs]
def setAspectLocked(self, lock=True, ratio=1):
"""
Defines the aspect ratio of the view
Parameters
----------
lock: (bool) if True aspect ratio is set to ratio, else the aspect ratio is varying when scaling the view
ratio: (int) aspect ratio between horizontal and vertical axis
"""
self.plotitem.vb.setAspectLocked(lock=True, ratio=1)
[docs]
def setupUI(self, *args_plotitem, **kwargs_plotitem):
layout = QtWidgets.QGridLayout()
# set viewer area
self.scene_obj = self.scene()
self.view = View_cust()
self.plotitem = pg.PlotItem(viewBox=self.view, *args_plotitem, **kwargs_plotitem)
self.plotItem = self.plotitem # for backcompatibility
self.setAspectLocked(lock=True, ratio=1)
self.setCentralItem(self.plotitem)
[docs]
def add_scaled_axis(self, position):
"""
Add a AxisItem_Scaled to the given position with respect with the plotitem
Parameters
----------
position: (str) either 'top', 'bottom', 'right' or 'left'
Returns
-------
"""
if position not in AXIS_POSITIONS:
raise ValueError(f'The Axis position {position} should be in {AXIS_POSITIONS}')
axis = AxisItem_Scaled(position)
self.plotitem.setAxisItems({position: axis})
return axis
[docs]
class PlotWidget(pg.PlotWidget):
def __init__(self, *args, **kwargs):
plot_item = pg.PlotItem(viewBox=View_cust())
super().__init__(*args, plotItem=plot_item, **kwargs)
@property
def view(self):
return self.getViewBox()
@property
def legend(self):
return self.plotItem.legend