def __init__(self, orientation='bottom', allowAdd=True, **kargs): """ ============== ================================================================================= **Arguments:** orientation Set the orientation of the gradient. Options are: 'left', 'right' 'top', and 'bottom'. allowAdd Specifies whether ticks can be added to the item by the user. tickPen Default is white. Specifies the color of the outline of the ticks. Can be any of the valid arguments for :func:`mkPen <pyqtgraph.mkPen>` ============== ================================================================================= """ ## public GraphicsWidget.__init__(self) self.orientation = orientation self.length = 100 self.tickSize = 15 self.ticks = {} self.maxDim = 20 self.allowAdd = allowAdd if 'tickPen' in kargs: self.tickPen = fn.mkPen(kargs['tickPen']) else: self.tickPen = fn.mkPen('w') self.orientations = { 'left': (90, 1, 1), 'right': (90, 1, 1), 'top': (0, 1, -1), 'bottom': (0, 1, 1) } self.setOrientation(orientation)
def __init__(self, size=None, offset=None, horSpacing=25, verSpacing=0, box=True, labelAlignment='center', showLines=True): """ ============== =============================================================== **Arguments:** size Specifies the fixed size (width, height) of the legend. If this argument is omitted, the legend will autimatically resize to fit its contents. offset Specifies the offset position relative to the legend's parent. Positive values offset from the left or top; negative values offset from the right or bottom. If offset is None, the legend must be anchored manually by calling anchor() or positioned by calling setPos(). horSpacing Specifies the spacing between the line symbol and the label. verSpacing Specifies the spacing between individual entries of the legend vertically. (Can also be negative to have them really close) box Specifies if the Legend should will be drawn with a rectangle around it. labelAlignment Specifies the alignment of the label texts. Possible values are "center", "left" or "right". showLines Specifies whether or not the lines should be shown in the legend. If value is "False" it will only show the labels with the corresponding text color. ============== =============================================================== """ GraphicsWidget.__init__(self) GraphicsWidgetAnchor.__init__(self) self.setFlag(self.ItemIgnoresTransformations) self.layout = QtWidgets.QGraphicsGridLayout() self.layout.setVerticalSpacing(verSpacing) self.layout.setHorizontalSpacing(horSpacing) self._horSpacing = horSpacing self._verSpacing = verSpacing self.setLayout(self.layout) self.legendItems = [] self.plotItems = [] self.hiddenFlag = [] self.size = size self.offset = offset self.box = box self.label_alignment = labelAlignment self.showLines = showLines # A numItems variable needs to be introduced, because chaining removeItem and addItem function in random order, # will otherwise lead to writing in the same layout row. Idea here is to always insert LabelItems on larger # and larger layout row numbers. The GraphicsGridlayout item will not care about empty rows. self.numItems = 0 if size is not None: self.setGeometry(QtCore.QRectF(0, 0, self.size[0], self.size[1]))
def __init__(self, size=None, offset=None): GraphicsWidget.__init__(self) GraphicsWidgetAnchor.__init__(self) self.setFlag(self.ItemIgnoresTransformations) self.layout = QtGui.QGraphicsGridLayout() self.setLayout(self.layout) self.size = size self.offset = offset if size is not None: self.setGeometry(QtCore.QRectF(0, 0, self.size[0], self.size[1]))
def __init__(self, image=None, fillHistogram=True): """ If *image* (ImageItem) is provided, then the control will be automatically linked to the image and changes to the control will be immediately reflected in the image's appearance. By default, the histogram is rendered with a fill. For performance, set *fillHistogram* = False. """ GraphicsWidget.__init__(self) self.lut = None self.imageItem = lambda: None # fake a dead weakref self.layout = QtWidgets.QGraphicsGridLayout() self.setLayout(self.layout) self.layout.setContentsMargins(1, 1, 1, 1) self.layout.setSpacing(0) self.vb = ViewBox(parent=self) self.vb.setMaximumWidth(152) self.vb.setMinimumWidth(45) self.vb.setMouseEnabled(x=False, y=True) self.gradient = GradientEditorItem() self.gradient.setOrientation('right') self.gradient.loadPreset('grey') self.region = LinearRegionItem([0, 1], LinearRegionItem.Horizontal) self.region.setZValue(1000) self.vb.addItem(self.region) self.axis = AxisItem('left', linkView=self.vb, maxTickLength=-10, parent=self) self.layout.addItem(self.axis, 0, 0) self.layout.addItem(self.vb, 0, 1) self.layout.addItem(self.gradient, 0, 2) self.range = None self.gradient.setFlag(self.gradient.ItemStacksBehindParent) self.vb.setFlag(self.gradient.ItemStacksBehindParent) #self.grid = GridItem() #self.vb.addItem(self.grid) self.gradient.sigGradientChanged.connect(self.gradientChanged) self.region.sigRegionChanged.connect(self.regionChanging) self.region.sigRegionChangeFinished.connect(self.regionChanged) self.vb.sigRangeChanged.connect(self.viewRangeChanged) self.plot = PlotDataItem() self.plot.rotate(90) self.fillHistogram(fillHistogram) self.vb.addItem(self.plot) self.autoHistogramRange() if image is not None: self.setImageItem(image)
def __init__(self, size=None, offset=None, horSpacing=25, verSpacing=0, box=True, labelAlignment = 'center', showLines = True): """ ============== =============================================================== **Arguments:** size Specifies the fixed size (width, height) of the legend. If this argument is omitted, the legend will autimatically resize to fit its contents. offset Specifies the offset position relative to the legend's parent. Positive values offset from the left or top; negative values offset from the right or bottom. If offset is None, the legend must be anchored manually by calling anchor() or positioned by calling setPos(). horSpacing Specifies the spacing between the line symbol and the label. verSpacing Specifies the spacing between individual entries of the legend vertically. (Can also be negative to have them really close) box Specifies if the Legend should will be drawn with a rectangle around it. labelAlignment Specifies the alignment of the label texts. Possible values are "center", "left" or "right". showLines Specifies whether or not the lines should be shown in the legend. If value is "False" it will only show the labels with the corresponding text color. ============== =============================================================== """ GraphicsWidget.__init__(self) GraphicsWidgetAnchor.__init__(self) self.setFlag(self.ItemIgnoresTransformations) self.layout = QtGui.QGraphicsGridLayout() self.layout.setVerticalSpacing(verSpacing) self.layout.setHorizontalSpacing(horSpacing) self._horSpacing = horSpacing self._verSpacing = verSpacing self.setLayout(self.layout) self.legendItems = [] self.plotItems = [] self.hiddenFlag = [] self.size = size self.offset = offset self.box = box self.label_alignment = labelAlignment self.showLines = showLines #A numItems variable needs to be introduced, because chaining removeItem and addItem function in random order, # will otherwise lead to writing in the same layout row. Idea here is to always insert LabelItems on larger # and larger layout row numbers. The GraphicsGridlayout item will not care about empty rows. self.numItems = 0 if size is not None: self.setGeometry(QtCore.QRectF(0, 0, self.size[0], self.size[1]))
def enable_relays( widget: GraphicsWidget, handler_names: list[str], ) -> list[Signal]: ''' Method override helper which enables relay of a particular ``Signal`` from some chosen broadcaster widget to a set of consumer widgets which should operate their event handlers normally but instead of signals "relayed" from the broadcaster. Mostly useful for overlaying widgets that handle user input that you want to overlay graphically. The target ``widget`` type must define ``QtCore.Signal``s each with a `'Relay'` suffix for each name provided in ``handler_names: list[str]``. ''' signals = [] for name in handler_names: handler = getattr(widget, name) signame = name + 'Relay' # ensure the target widget defines a relay signal relay = getattr(widget, signame) widget.relays[signame] = name signals.append(relay) method = mk_relay_method(signame, handler) setattr(widget, name, method) return signals
def __init__(self, image=None, fillHistogram=True): """ If *image* (ImageItem) is provided, then the control will be automatically linked to the image and changes to the control will be immediately reflected in the image's appearance. By default, the histogram is rendered with a fill. For performance, set *fillHistogram* = False. """ GraphicsWidget.__init__(self) self.lut = None self.imageItem = lambda: None # fake a dead weakref self.layout = QtWidgets.QGraphicsGridLayout() self.setLayout(self.layout) self.layout.setContentsMargins(1,1,1,1) self.layout.setSpacing(0) self.vb = ViewBox(parent=self) self.vb.setMaximumWidth(152) self.vb.setMinimumWidth(45) self.vb.setMouseEnabled(x=False, y=True) self.gradient = GradientEditorItem() self.gradient.setOrientation('right') self.gradient.loadPreset('grey') self.region = LinearRegionItem([0, 1], LinearRegionItem.Horizontal) self.region.setZValue(1000) self.vb.addItem(self.region) self.axis = AxisItem('left', linkView=self.vb, maxTickLength=-10, parent=self) self.layout.addItem(self.axis, 0, 0) self.layout.addItem(self.vb, 0, 1) self.layout.addItem(self.gradient, 0, 2) self.range = None self.gradient.setFlag(self.gradient.ItemStacksBehindParent) self.vb.setFlag(self.gradient.ItemStacksBehindParent) #self.grid = GridItem() #self.vb.addItem(self.grid) self.gradient.sigGradientChanged.connect(self.gradientChanged) self.region.sigRegionChanged.connect(self.regionChanging) self.region.sigRegionChangeFinished.connect(self.regionChanged) self.vb.sigRangeChanged.connect(self.viewRangeChanged) self.plot = PlotDataItem() self.plot.rotate(90) self.fillHistogram(fillHistogram) self.vb.addItem(self.plot) self.autoHistogramRange() if image is not None: self.setImageItem(image)
def __init__(self, image=None, fillHistogram=True): """ If *image* (ImageItem) is provided, then the control will be automatically linked to the image and changes to the control will be immediately reflected in the image's appearance. By default, the histogram is rendered with a fill. For performance, set *fillHistogram* = False. """ GraphicsWidget.__init__(self) self.lut = None self.imageItem = None self.first_image = True self.percentageLevel = False self.layout = QtGui.QGraphicsGridLayout() self.setLayout(self.layout) self.layout.setContentsMargins(1, 1, 1, 1) self.layout.setSpacing(0) self.vb = ViewBox() self.vb.setMaximumHeight(30) self.vb.setMinimumHeight(45) self.vb.setMouseEnabled(x=True, y=False) self.gradient = GradientEditorItem() self.gradient.setOrientation("top") self.gradient.loadPreset("grey") self.region = LinearRegionItem([0, 1], LinearRegionItem.Vertical) self.region.setZValue(1000) self.vb.addItem(self.region) self.layout.addItem(self.vb, 1, 0) self.layout.addItem(self.gradient, 0, 0) self.range = None self.gradient.setFlag(self.gradient.ItemStacksBehindParent) self.vb.setFlag(self.gradient.ItemStacksBehindParent) # self.grid = GridItem() # self.vb.addItem(self.grid) self.gradient.sigGradientChanged.connect(self.gradientChanged) self.region.sigRegionChanged.connect(self.regionChanging) self.region.sigRegionChangeFinished.connect(self.regionChanged) self.vb.sigRangeChanged.connect(self.viewRangeChanged) self.plot = PlotDataItem() self.fillHistogram(fillHistogram) self.vb.addItem(self.plot) self.autoHistogramRange() if image is not None: self.setImageItem(image)
def setParentItem(self, p): ret = GraphicsWidget.setParentItem(self, p) if self.offset is not None: offset = Point(self.offset) anchorx = 1 if offset[0] <= 0 else 0 anchory = 1 if offset[1] <= 0 else 0 anchor = (anchorx, anchory) self.anchor(itemPos=anchor, parentPos=anchor, offset=offset) return ret
def __init__(self, item): GraphicsWidget.__init__(self) self.item = item
def __init__(self, image=None, fillHistogram=False, orientation='horizontal', autoLevel=None): """ If *image* (ImageItem) is provided, then the control will be automatically linked to the image and changes to the control will be immediately reflected in the image's appearance. By default, the histogram is rendered with a fill. For performance, set *fillHistogram* = False. """ GraphicsWidget.__init__(self) self.lut = None self.imageItem = None self.first_image = True self.percentageLevel = False self.orientation = orientation self.autoLevel = autoLevel self.layout = QtWidgets.QGraphicsGridLayout() self.setLayout(self.layout) self.layout.setContentsMargins(1, 1, 1, 1) self.layout.setSpacing(0) self.vb = ViewBox() self.gradient = GradientEditorItem() self.gradient.loadPreset('grey') if orientation == 'horizontal': self.vb.setMouseEnabled(x=True, y=False) self.vb.setMaximumHeight(30) self.vb.setMinimumHeight(45) self.gradient.setOrientation('top') self.region = LogarithmRegionItem([0, 1], LinearRegionItem.Vertical) self.layout.addItem(self.vb, 1, 0) self.layout.addItem(self.gradient, 0, 0) self.gradient.setFlag(self.gradient.ItemStacksBehindParent) self.vb.setFlag(self.gradient.ItemStacksBehindParent) elif orientation == 'vertical': self.vb.setMouseEnabled(x=False, y=True) self.vb.setMaximumWidth(30) self.vb.setMinimumWidth(45) self.gradient.setOrientation('right') self.region = LogarithmRegionItem([0, 1], LinearRegionItem.Horizontal) self.layout.addItem(self.vb, 0, 0) self.layout.addItem(self.gradient, 0, 1) self.gradient.setFlag(self.gradient.ItemStacksBehindParent) self.vb.setFlag(self.gradient.ItemStacksBehindParent) self.region.setZValue(1000) self.vb.addItem(self.region) self.vb.setMenuEnabled(False) # self.grid = GridItem() # self.vb.addItem(self.grid) self.gradient.sigGradientChanged.connect(self.gradientChanged) self.region.sigRegionChanged.connect(self.regionChanging) self.region.sigRegionChangeFinished.connect(self.regionChanged) self.vb.sigRangeChanged.connect(self.viewRangeChanged) self.plot = PlotDataItem() self.vb.autoRange() self.fillHistogram(fillHistogram) self.plot.setPen(pg.mkPen(color=(50, 150, 50), size=3)) self.vb.addItem(self.plot) self.autoHistogramRange() if image is not None: self.setImageItem(image) # self.setSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Expanding) self.vb.mouseClickEvent = self.empty_function self.vb.mouseDragEvent = self.empty_function self.vb.mouseDoubleClickEvent = self.empty_function self.vb.wheelEvent = self.empty_function
def __init__(self, image=None, fillHistogram=False, orientation='horizontal'): """ If *image* (ImageItem) is provided, then the control will be automatically linked to the image and changes to the control will be immediately reflected in the image's appearance. By default, the histogram is rendered with a fill. For performance, set *fillHistogram* = False. """ GraphicsWidget.__init__(self) self.lut = None self.imageItem = None self.first_image = True self.percentageLevel = False self.orientation = orientation self.range = None self.layout = QtGui.QGraphicsGridLayout() self.setLayout(self.layout) self.layout.setContentsMargins(1, 1, 1, 1) self.layout.setSpacing(0) self.vb = ViewBox() self.gradient = GradientEditorItem() self.gradient.loadPreset('grey') if orientation == 'horizontal': self.vb.setMouseEnabled(x=True, y=False) self.vb.setMaximumHeight(30) self.vb.setMinimumHeight(45) self.gradient.setOrientation('top') self.region = LogarithmRegionItem([0, 1], LinearRegionItem.Vertical) self.layout.addItem(self.vb, 1, 0) self.layout.addItem(self.gradient, 0, 0) self.gradient.setFlag(self.gradient.ItemStacksBehindParent) self.vb.setFlag(self.gradient.ItemStacksBehindParent) elif orientation == 'vertical': self.vb.setMouseEnabled(x=False, y=True) self.vb.setMaximumWidth(30) self.vb.setMinimumWidth(45) self.gradient.setOrientation('right') self.region = LogarithmRegionItem([0, 1], LinearRegionItem.Horizontal) self.layout.addItem(self.vb, 0, 0) self.layout.addItem(self.gradient, 0, 1) self.gradient.setFlag(self.gradient.ItemStacksBehindParent) self.vb.setFlag(self.gradient.ItemStacksBehindParent) self.region.setZValue(1000) self.vb.addItem(self.region) self.vb.setMenuEnabled(False) #self.grid = GridItem() #self.vb.addItem(self.grid) self.gradient.sigGradientChanged.connect(self.gradientChanged) self.region.sigRegionChanged.connect(self.regionChanging) self.region.sigRegionChangeFinished.connect(self.regionChanged) self.vb.sigRangeChanged.connect(self.viewRangeChanged) self.plot = PlotDataItem() if self.orientation == 'horizontal': self.plot.setLogMode(yMode=True, xMode=False) elif self.orientation == 'vertical': self.plot.setLogMode(yMode=False, xMode=True) self.vb.invertX(True) self.vb.autoRange() self.fillHistogram(fillHistogram) self.plot.setPen(pg.mkPen(color=(50, 150, 50), size=3)) self.vb.addItem(self.plot) self.autoHistogramRange() if image is not None: self.setImageItem(image) #self.setSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Expanding) self.vb.mouseClickEvent = self.empty_function self.vb.mouseDragEvent = self.empty_function self.vb.mouseDoubleClickEvent = self.empty_function self.vb.wheelEvent = self.empty_function