예제 #1
0
    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))
예제 #2
0
 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)
예제 #3
0
    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)
예제 #4
0
    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)