def __init__(self, *args, **kwargs): QtGui.QWidget.__init__(self) # variable that handles the manipulation of the spectrogram # create, recompute etc self.specgramHandler = Spectrogram() # create the histogram widget self.imageItem = ImageItem() self.__histogram = HorizontalHistogramWidget() self.__histogram.item.setImageItem(self.imageItem) # internal vieBox for image graph self.viewBox = ViewBox() self.viewBox.addItem(self.imageItem) self.viewBox.setMouseEnabled(x=False, y=False) self.viewBox.setMenuEnabled(False) self.viewBox.setAspectLocked(False) # set the X and Y axis for the graph self.xAxis = OscXAxis(self, orientation='bottom') self.yAxis = SpecYAxis(self, orientation='left') self.xAxis.linkToView(self.viewBox) self.yAxis.linkToView(self.viewBox) self.xAxis.setGrid(self.AXIS_LINES_OPACITY) self.yAxis.setGrid(self.AXIS_LINES_OPACITY) # adjust the graph zone in the control horizontal_histogram = kwargs[ "horizontal_histogram"] if "horizontal_histogram" in kwargs else True visible_histogram = kwargs[ "visible_histogram"] if "visible_histogram" in kwargs else False self.__updateLayout(histogramHorizontal=( horizontal_histogram if visible_histogram else None))
def __init__(self, parent=None, allowTransforms=True, hideCtrl=False, name=None): QtGui.QWidget.__init__(self, parent) self.ui = Ui_Form() self.ui.setupUi(self) #self.view = self.ui.view self.view = ViewBox() self.ui.view.setCentralItem(self.view) self.itemList = self.ui.itemList self.itemList.setSelectionMode(self.itemList.ExtendedSelection) self.allowTransforms = allowTransforms self.multiSelectBox = SelectBox() self.view.addItem(self.multiSelectBox) self.multiSelectBox.hide() self.multiSelectBox.setZValue(1e6) self.ui.mirrorSelectionBtn.hide() self.ui.reflectSelectionBtn.hide() self.ui.resetTransformsBtn.hide() self.redirect = None ## which canvas to redirect items to self.items = [] #self.view.enableMouse() self.view.setAspectLocked(True) self.view.invertY() grid = GridItem() self.grid = CanvasItem(grid, name='Grid', movable=False) self.addItem(self.grid) self.hideBtn = QtGui.QPushButton('>', self) self.hideBtn.setFixedWidth(20) self.hideBtn.setFixedHeight(20) self.ctrlSize = 200 self.sizeApplied = False self.hideBtn.clicked.connect(self.hideBtnClicked) self.ui.splitter.splitterMoved.connect(self.splitterMoved) self.ui.itemList.itemChanged.connect(self.treeItemChanged) self.ui.itemList.sigItemMoved.connect(self.treeItemMoved) self.ui.itemList.itemSelectionChanged.connect(self.treeItemSelected) self.ui.autoRangeBtn.clicked.connect(self.autoRange) self.ui.storeSvgBtn.clicked.connect(self.storeSvg) self.ui.storePngBtn.clicked.connect(self.storePng) self.ui.redirectCheck.toggled.connect(self.updateRedirect) self.ui.redirectCombo.currentIndexChanged.connect(self.updateRedirect) self.multiSelectBox.sigRegionChanged.connect(self.multiSelectBoxChanged) self.multiSelectBox.sigRegionChangeFinished.connect(self.multiSelectBoxChangeFinished) self.ui.mirrorSelectionBtn.clicked.connect(self.mirrorSelectionClicked) self.ui.reflectSelectionBtn.clicked.connect(self.reflectSelectionClicked) self.ui.resetTransformsBtn.clicked.connect(self.resetTransformsClicked) self.resizeEvent() if hideCtrl: self.hideBtnClicked() if name is not None: self.registeredName = CanvasManager.instance().registerCanvas(self, name) self.ui.redirectCombo.setHostName(self.registeredName)
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. """ HistogramLUTItem.__init__(self, image, fillHistogram) self.layout = QtGui.QGraphicsGridLayout() self.layout.setContentsMargins(1, 1, 1, 1) self.layout.setSpacing(0) # the viewbox in which would be displayed the histogram # get a new and descriptive name for the view box self.view_boxHistogram = self.vb self.view_boxHistogram = ViewBox() self.view_boxHistogram.setMaximumHeight(self.HISTOGRAM_MAX_HEIGHT) self.view_boxHistogram.setMinimumHeight(self.HISTOGRAM_MIN_HEIGHT) self.view_boxHistogram.setMouseEnabled(x=False, y=False) # set defaults gradient position and color bar self.gradient.setOrientation('bottom') self.gradient.loadPreset('thermal') # todo remove this parche the region of threshold selection self.region.setVisible(False) self._region = LinearRegionItem(values=[-40, 0], orientation=LinearRegionItem.Vertical) self.view_boxHistogram.addItem(self._region) self.axis = AxisItem('top', linkView=self.view_boxHistogram, maxTickLength=-10, showValues=False) self.layout.addItem(self.axis, 0, 0) self.layout.addItem(self.view_boxHistogram, 1, 0) self.layout.addItem(self.gradient, 2, 0) self.gradient.setFlag(self.gradient.ItemStacksBehindParent) self.view_boxHistogram.setFlag(self.gradient.ItemStacksBehindParent) self.plot = PlotDataItem() self.fillHistogram(fillHistogram) self.view_boxHistogram.addItem(self.plot) self.autoHistogramRange() # set the fixed range of visualization self.view_boxHistogram.setXRange(-120, 5) self._region.setBounds((-120, 5)) y_range = self.view_boxHistogram.viewRange()[1] # the minThresholdLabel and maxThresholdLabel labels self.minThresholdLabel = pg.TextItem(self.tr(u'Min'), color=(255, 255, 255), anchor=(1, 0.5)) self.view_boxHistogram.addItem(self.minThresholdLabel) self.maxThresholdLabel = pg.TextItem(self.tr(u'Max'), color=(255, 255, 255), anchor=(0, 0.5)) self.view_boxHistogram.addItem(self.maxThresholdLabel) self.gradient.sigGradientChanged.connect(self.gradientChanged) self._region.sigRegionChanged.connect(self.regionChanging) self._region.sigRegionChangeFinished.connect(self.regionChanged) labels_ypos = self.view_boxHistogram.viewRange()[1][1] * 0.7 self.maxThresholdLabel.setPos(self._region.getRegion()[1], labels_ypos) self.minThresholdLabel.setPos(self._region.getRegion()[0], labels_ypos) # update the tooltips and position of the limit labels self._region.sigRegionChangeFinished.connect( lambda: self.maxThresholdLabel.setToolTip(self.tr(u'Max Threshold') + u": " + unicode(round(self._region.getRegion()[1], self.DECIMAL_PLACES)))) self._region.sigRegionChangeFinished.connect( lambda: self.minThresholdLabel.setToolTip(self.tr(u'Min Threshold') + u": " + unicode(round(self._region.getRegion()[0], self.DECIMAL_PLACES)))) # set the y position of the labels to the 70% of the visible y range of the viewbox self._region.sigRegionChanged.connect( lambda: self.maxThresholdLabel.setPos(self._region.getRegion()[1], self.view_boxHistogram.viewRange()[1][1] * 0.7)) self._region.sigRegionChanged.connect( lambda: self.minThresholdLabel.setPos(self._region.getRegion()[0], self.view_boxHistogram.viewRange()[1][1] * 0.7)) if image is not None: self.setImageItem(image) self.setLayout(self.layout)
def __init__(self, image=None, fillHistogram=True, orientation='right', gradients=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 = lambda: None # fake a dead weakref self.layout = QtGui.QGraphicsGridLayout() self.setLayout(self.layout) self.layout.setContentsMargins(1, 1, 1, 1) self.layout.setSpacing(0) self.vb = ViewBox(parent=self) if orientation in ['right', 'left']: self.vb.setMaximumWidth(150) self.vb.setMinimumWidth(15) self.vb.setMouseEnabled(x=False, y=True) elif orientation in ['bottom', 'top']: self.vb.setMaximumHeight(150) self.vb.setMinimumHeight(15) self.vb.setMouseEnabled(x=True, y=False) self.orientation = orientation orientationGEI = orientation if orientation == 'right': orientationLRI = 'horizontal' orientationAI = 'left' elif orientation == 'left': orientationLRI = 'horizontal' orientationAI = 'right' elif orientation == 'bottom': orientationLRI = 'vertical' orientationAI = 'top' elif orientation == 'top': orientationLRI = 'vertical' orientationAI = 'bottom' self.gradient = GradientEditorItem(gradients=gradients) self.gradient.setOrientation(orientationGEI) self.gradient.loadPreset('grey') self.region = LinearRegionItem([0, 1], orientation=orientationLRI) self.region.setZValue(1000) self.vb.addItem(self.region) self.axis = AxisItem(orientationAI, linkView=self.vb, maxTickLength=-10, parent=self) if orientation == 'right': self.layout.addItem(self.axis, 0, 0) self.layout.addItem(self.vb, 0, 1) self.layout.addItem(self.gradient, 0, 2) elif orientation == 'left': self.layout.addItem(self.gradient, 0, 0) self.layout.addItem(self.vb, 0, 1) self.layout.addItem(self.axis, 0, 2) elif orientation == 'bottom': self.layout.addItem(self.axis, 0, 0) self.layout.addItem(self.vb, 1, 0) self.layout.addItem(self.gradient, 2, 0) elif orientation == 'top': self.layout.addItem(self.gradient, 0, 0) self.layout.addItem(self.vb, 1, 0) self.layout.addItem(self.axis, 2, 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.plot.rotate(90) self.fillHistogram(fillHistogram) self.vb.addItem(self.plot) self.autoHistogramRange() if image is not None: self.setImageItem(image)