Source code for layer_viewer.widgets.fraction_selection_bar

import pyqtgraph as pg
import os
from pyqtgraph.Qt import QtCore, QtGui
import pyqtgraph.Qt as Qt
import PyQt5


[docs]class FractionSelectionBar(QtGui.QWidget): fractionChanged = QtCore.pyqtSignal(float) def __init__(self, initial_fraction=1.0, parent=None): super(FractionSelectionBar, self).__init__(parent=parent) self._fraction = initial_fraction self._lmbDown = False
[docs] def fraction(self): return self._fraction
[docs] def setFraction(self, value): if value == self._fraction: return if value < 0.0: value = 0.0 warnings.warn( "FractionSelectionBar.setFraction(): value has to be between 0. and 1. (was %s); setting to 0." % str(value) ) if value > 1.0: value = 1.0 warnings.warn( "FractionSelectionBar.setFraction(): value has to be between 0. and 1. (was %s); setting to 1." % str(value) ) self._fraction = float(value) self.update()
[docs] def mouseMoveEvent(self, event): if self._lmbDown: self.setFraction(self._fractionFromPosition(event.localPos())) self.fractionChanged.emit(self._fraction)
[docs] def mousePressEvent(self, event): if event.button() == QtCore.Qt.RightButton: return self._lmbDown = True self.setFraction(self._fractionFromPosition(event.localPos())) self.fractionChanged.emit(self._fraction)
[docs] def mouseReleaseEvent(self, event): self._lmbDown = False
[docs] def paintEvent(self, ev): painter = QtGui.QPainter(self) # calc bar offset y_offset = (self.height() - self._barHeight()) // 2 ## prevent negative offset y_offset = 0 if y_offset < 0 else y_offset # frame around fraction indicator painter.setBrush(self.palette().dark()) painter.save() ## no fill color b = painter.brush() b.setStyle(QtCore.Qt.NoBrush) painter.setBrush(b) painter.drawRect( QtCore.QRect( QtCore.QPoint(0, y_offset), QtCore.QSize(self._barWidth(), self._barHeight()), ) ) painter.restore() # fraction indicator painter.drawRect( QtCore.QRect( QtCore.QPoint(0, y_offset), QtCore.QSize(self._barWidth() * self._fraction, self._barHeight()), ) )
[docs] def sizeHint(self): return QtCore.QSize(100, 10)
[docs] def minimumSizeHint(self): return QtCore.QSize(1, 3)
def _barWidth(self): return self.width() - 1 def _barHeight(self): return self.height() - 1 def _fractionFromPosition(self, pointf): frac = float(pointf.x()) / self.width() # mouse has left the widget if frac < 0.0: frac = 0.0 if frac > 1.0: frac = 1.0 return frac