addition of a draggable option for infiniteline
This commit is contained in:
parent
ba4b648263
commit
5888603ebf
@ -18,7 +18,7 @@ pg.setConfigOptions(antialias=True)
|
|||||||
|
|
||||||
p1 = win.addPlot(title="Plot Items example", y=np.random.normal(size=100))
|
p1 = win.addPlot(title="Plot Items example", y=np.random.normal(size=100))
|
||||||
inf1 = pg.InfiniteLine(movable=True, angle=90, label=True, textPosition=[0.5, 0.2], textColor=(200,200,100), textFill=(200,200,200,50))
|
inf1 = pg.InfiniteLine(movable=True, angle=90, label=True, textPosition=[0.5, 0.2], textColor=(200,200,100), textFill=(200,200,200,50))
|
||||||
inf2 = pg.InfiniteLine(movable=True, angle=0, label=True, pen=(0, 0, 200), textColor=(200,0,0), bounds = [-2, 2], suffix="mm", hoverPen=(0,200,0))
|
inf2 = pg.InfiniteLine(movable=True, angle=0, label=True, pen=(0, 0, 200), textColor=(200,0,0), bounds = [-2, 2], suffix="mm", hoverPen=(0,200,0), draggableLabel=True)
|
||||||
inf3 = pg.InfiniteLine(movable=True, angle=45)
|
inf3 = pg.InfiniteLine(movable=True, angle=45)
|
||||||
inf1.setPos([2,2])
|
inf1.setPos([2,2])
|
||||||
inf1.setTextLocation(position=0.75)
|
inf1.setTextLocation(position=0.75)
|
||||||
@ -26,7 +26,8 @@ inf2.setTextLocation(shift=0.8)
|
|||||||
p1.addItem(inf1)
|
p1.addItem(inf1)
|
||||||
p1.addItem(inf2)
|
p1.addItem(inf2)
|
||||||
p1.addItem(inf3)
|
p1.addItem(inf3)
|
||||||
lr = pg.LinearRegionItem(values=[0, 10])
|
|
||||||
|
lr = pg.LinearRegionItem(values=[5, 10])
|
||||||
p1.addItem(lr)
|
p1.addItem(lr)
|
||||||
|
|
||||||
## Start Qt event loop unless running in interactive mode or using pyside.
|
## Start Qt event loop unless running in interactive mode or using pyside.
|
||||||
|
@ -32,7 +32,7 @@ class InfiniteLine(GraphicsObject):
|
|||||||
|
|
||||||
def __init__(self, pos=None, angle=90, pen=None, movable=False, bounds=None,
|
def __init__(self, pos=None, angle=90, pen=None, movable=False, bounds=None,
|
||||||
hoverPen=None, label=False, textColor=None, textFill=None,
|
hoverPen=None, label=False, textColor=None, textFill=None,
|
||||||
textPosition=[0.05, 0.5], textFormat="{:.3f}",
|
textPosition=[0.05, 0.5], textFormat="{:.3f}", draggableLabel=False,
|
||||||
suffix=None, name='InfiniteLine'):
|
suffix=None, name='InfiniteLine'):
|
||||||
"""
|
"""
|
||||||
=============== ==================================================================
|
=============== ==================================================================
|
||||||
@ -59,6 +59,9 @@ class InfiniteLine(GraphicsObject):
|
|||||||
of the label from one side of the line to the other in the
|
of the label from one side of the line to the other in the
|
||||||
orthogonal direction.
|
orthogonal direction.
|
||||||
textFormat Any new python 3 str.format() format.
|
textFormat Any new python 3 str.format() format.
|
||||||
|
draggableLabel Bool. If True, the user can relocate the label during the dragging.
|
||||||
|
If set to True, the first entry of textPosition is no longer
|
||||||
|
useful.
|
||||||
suffix If not None, corresponds to the unit to show next to the label
|
suffix If not None, corresponds to the unit to show next to the label
|
||||||
name name of the item
|
name name of the item
|
||||||
=============== ==================================================================
|
=============== ==================================================================
|
||||||
@ -81,6 +84,7 @@ class InfiniteLine(GraphicsObject):
|
|||||||
self.textColor = textColor
|
self.textColor = textColor
|
||||||
self.textFill = textFill
|
self.textFill = textFill
|
||||||
self.textPosition = textPosition
|
self.textPosition = textPosition
|
||||||
|
self.draggableLabel = draggableLabel
|
||||||
self.suffix = suffix
|
self.suffix = suffix
|
||||||
|
|
||||||
if (self.angle == 0 or self.angle == 90) and label:
|
if (self.angle == 0 or self.angle == 90) and label:
|
||||||
@ -190,17 +194,20 @@ class InfiniteLine(GraphicsObject):
|
|||||||
self._invalidateCache()
|
self._invalidateCache()
|
||||||
|
|
||||||
if self.textItem is not None and self.getViewBox() is not None and isinstance(self.getViewBox(), ViewBox):
|
if self.textItem is not None and self.getViewBox() is not None and isinstance(self.getViewBox(), ViewBox):
|
||||||
self.updateTextAndLocation()
|
self.updateText()
|
||||||
else:
|
if self.draggableLabel:
|
||||||
|
GraphicsObject.setPos(self, Point(self.p))
|
||||||
|
else: # precise location needed
|
||||||
|
GraphicsObject.setPos(self, self._exactPos)
|
||||||
|
else: # no label displayed or called just before being dragged for the first time
|
||||||
GraphicsObject.setPos(self, Point(self.p))
|
GraphicsObject.setPos(self, Point(self.p))
|
||||||
self.update()
|
self.update()
|
||||||
self.sigPositionChanged.emit(self)
|
self.sigPositionChanged.emit(self)
|
||||||
|
|
||||||
def updateTextAndLocation(self):
|
def updateText(self):
|
||||||
"""
|
"""
|
||||||
Update the content displayed by the textItem and the location of the
|
Update the content displayed by the textItem. Called only if a textItem
|
||||||
item. Called only if a textItem is requested and if the item has
|
is requested and if the item has already been added to a PlotItem.
|
||||||
already been added to a PlotItem.
|
|
||||||
"""
|
"""
|
||||||
rangeX, rangeY = self.getViewBox().viewRange()
|
rangeX, rangeY = self.getViewBox().viewRange()
|
||||||
xmin, xmax = rangeX
|
xmin, xmax = rangeX
|
||||||
@ -218,7 +225,8 @@ class InfiniteLine(GraphicsObject):
|
|||||||
fmt = fmt + self.suffix
|
fmt = fmt + self.suffix
|
||||||
self.textItem.setText(fmt.format(self.value()), color=self.textColor)
|
self.textItem.setText(fmt.format(self.value()), color=self.textColor)
|
||||||
posY = ymin+pos*(ymax-ymin)
|
posY = ymin+pos*(ymax-ymin)
|
||||||
GraphicsObject.setPos(self, Point(self.value(), posY))
|
#self.p = [self.value(), posY]
|
||||||
|
self._exactPos = Point(self.value(), posY)
|
||||||
elif self.angle == 0: # horizontal line
|
elif self.angle == 0: # horizontal line
|
||||||
diffMin = self.value()-ymin
|
diffMin = self.value()-ymin
|
||||||
limInf = shift*(ymax-ymin)
|
limInf = shift*(ymax-ymin)
|
||||||
@ -231,7 +239,8 @@ class InfiniteLine(GraphicsObject):
|
|||||||
fmt = fmt + self.suffix
|
fmt = fmt + self.suffix
|
||||||
self.textItem.setText(fmt.format(self.value()), color=self.textColor)
|
self.textItem.setText(fmt.format(self.value()), color=self.textColor)
|
||||||
posX = xmin+pos*(xmax-xmin)
|
posX = xmin+pos*(xmax-xmin)
|
||||||
GraphicsObject.setPos(self, Point(posX, self.value()))
|
#self.p = [posX, self.value()]
|
||||||
|
self._exactPos = Point(posX, self.value())
|
||||||
|
|
||||||
def getXPos(self):
|
def getXPos(self):
|
||||||
return self.p[0]
|
return self.p[0]
|
||||||
@ -349,7 +358,7 @@ class InfiniteLine(GraphicsObject):
|
|||||||
self._invalidateCache()
|
self._invalidateCache()
|
||||||
|
|
||||||
if self.getViewBox() is not None and isinstance(self.getViewBox(), ViewBox) and self.textItem is not None:
|
if self.getViewBox() is not None and isinstance(self.getViewBox(), ViewBox) and self.textItem is not None:
|
||||||
self.updateTextAndLocation()
|
self.updateText()
|
||||||
|
|
||||||
def showLabel(self, state):
|
def showLabel(self, state):
|
||||||
"""
|
"""
|
||||||
@ -387,6 +396,15 @@ class InfiniteLine(GraphicsObject):
|
|||||||
self.textPosition = [pos, shift]
|
self.textPosition = [pos, shift]
|
||||||
self.update()
|
self.update()
|
||||||
|
|
||||||
|
def setDraggableLabel(self, state):
|
||||||
|
"""
|
||||||
|
Set the state of the label regarding its behaviour during the dragging
|
||||||
|
of the line. If True, then the location of the label change during the
|
||||||
|
dragging of the line.
|
||||||
|
"""
|
||||||
|
self.draggableLabel = state
|
||||||
|
self.update()
|
||||||
|
|
||||||
def setName(self, name):
|
def setName(self, name):
|
||||||
self._name = name
|
self._name = name
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user