Source code for pymodaq_gui.plotting.items.crosshair

import os
import numpy as np
from qtpy import QtCore, QtGui
from qtpy.QtCore import Signal
import pyqtgraph as pg
import numpy as np


[docs] class Crosshair(pg.GraphicsObject): crosshair_dragged = Signal(float, float, name='crosshair_dragged') # signal used to pass crosshair position to other methods def __init__(self, plotitem, orientation='both', pen=None): super().__init__() if hasattr(plotitem, 'plotitem'): # in case one pass a plot or image widget self.plotitem = plotitem.plotitem else: self.plotitem = plotitem # self.crosshair_dragged[float,float].connect(self.print_pos) #exemple on how to use the crosshair_dragged signal if orientation == 'both': self.vline_visible = True self.hline_visible = True elif orientation == 'vertical': self.vline_visible = True self.hline_visible = False else: self.vline_visible = False self.hline_visible = True self.vLine = pg.InfiniteLine(angle=90, movable=True, pen=pen) self.hLine = pg.InfiniteLine(angle=0, movable=True, pen=pen) self.plotitem.addItem(self.vLine, ignoreBounds=True) self.plotitem.addItem(self.hLine, ignoreBounds=True) self.vLine.sigDragged.connect(self.update_hline) self.hLine.sigDragged.connect(self.update_vline)
[docs] def show_hide_crosshair(self): if self.vline_visible: self.vLine.show() else: self.vLine.hide() if self.hline_visible: self.hLine.show() else: self.hLine.hide()
[docs] def set_crosshair_position(self, xpos=0, ypos=0): self.vLine.setValue(xpos) self.hLine.setValue(ypos) self.crosshair_dragged.emit(xpos, ypos)
[docs] def update_hline(self): self.hLine.sigDragged.disconnect(self.update_vline) p = self.vLine.getYPos() - self.vLine.cursorOffset.y() self.hLine.setPos(p) self.hLine.sigDragged.connect(self.update_vline) self.crosshair_dragged.emit(self.vLine.getXPos(), self.hLine.getYPos())
[docs] def get_positions(self): return (self.vLine.getXPos(), self.hLine.getYPos())
[docs] def update_vline(self): self.vLine.sigDragged.disconnect(self.update_hline) p = self.hLine.getXPos() - self.hLine.cursorOffset.x() self.vLine.setPos(p) self.vLine.sigDragged.connect(self.update_hline) self.crosshair_dragged.emit(self.vLine.getXPos(), self.hLine.getYPos())
[docs] def hide(self): self.vLine.hide() self.hLine.hide()
[docs] def show(self): self.show_hide_crosshair()
[docs] def value(self): """ value returns a tuple containing (x,y) positions of the crosshair """ return (self.vLine.value(), self.hLine.value())
[docs] def setVisible(self, state): self.hLine.setVisible(state) self.vLine.setVisible(state) if state: self.show_hide_crosshair()
[docs] def isVisible(self): return self.hLine.isVisible()