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=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