def __init__(self, parent=None, name=None, labels=None, **kargs): QtGui.QGraphicsWidget.__init__(self, parent) ## Set up control buttons self.ctrlBtn = QtGui.QToolButton() self.ctrlBtn.setText('?') self.autoBtn = QtGui.QToolButton() self.autoBtn.setText('A') self.autoBtn.hide() self.proxies = [] for b in [self.ctrlBtn, self.autoBtn]: proxy = QtGui.QGraphicsProxyWidget(self) proxy.setWidget(b) proxy.setAcceptHoverEvents(False) b.setStyleSheet( "background-color: #000000; color: #888; font-size: 6pt") self.proxies.append(proxy) #QtCore.QObject.connect(self.ctrlBtn, QtCore.SIGNAL('clicked()'), self.ctrlBtnClicked) self.ctrlBtn.clicked.connect(self.ctrlBtnClicked) #QtCore.QObject.connect(self.autoBtn, QtCore.SIGNAL('clicked()'), self.enableAutoScale) self.autoBtn.clicked.connect(self.enableAutoScale) self.layout = QtGui.QGraphicsGridLayout() self.layout.setContentsMargins(1, 1, 1, 1) self.setLayout(self.layout) self.layout.setHorizontalSpacing(0) self.layout.setVerticalSpacing(0) self.vb = ViewBox() #QtCore.QObject.connect(self.vb, QtCore.SIGNAL('xRangeChanged'), self.xRangeChanged) self.vb.sigXRangeChanged.connect(self.xRangeChanged) #QtCore.QObject.connect(self.vb, QtCore.SIGNAL('yRangeChanged'), self.yRangeChanged) self.vb.sigYRangeChanged.connect(self.yRangeChanged) #QtCore.QObject.connect(self.vb, QtCore.SIGNAL('rangeChangedManually'), self.enableManualScale) self.vb.sigRangeChangedManually.connect(self.enableManualScale) #QtCore.QObject.connect(self.vb, QtCore.SIGNAL('viewChanged'), self.viewChanged) self.vb.sigRangeChanged.connect(self.viewRangeChanged) self.layout.addItem(self.vb, 2, 1) self.alpha = 1.0 self.autoAlpha = True self.spectrumMode = False self.autoScale = [True, True] ## Create and place scale items self.scales = { 'top': { 'item': ScaleItem(orientation='top', linkView=self.vb), 'pos': (1, 1) }, 'bottom': { 'item': ScaleItem(orientation='bottom', linkView=self.vb), 'pos': (3, 1) }, 'left': { 'item': ScaleItem(orientation='left', linkView=self.vb), 'pos': (2, 0) }, 'right': { 'item': ScaleItem(orientation='right', linkView=self.vb), 'pos': (2, 2) } } for k in self.scales: self.layout.addItem(self.scales[k]['item'], *self.scales[k]['pos']) ## Create and place label items #self.labels = { #'title': {'item': LabelItem('title', size='11pt'), 'pos': (0, 2), 'text': ''}, #'top': {'item': LabelItem('top'), 'pos': (1, 2), 'text': '', 'units': '', 'unitPrefix': ''}, #'bottom': {'item': LabelItem('bottom'), 'pos': (5, 2), 'text': '', 'units': '', 'unitPrefix': ''}, #'left': {'item': LabelItem('left'), 'pos': (3, 0), 'text': '', 'units': '', 'unitPrefix': ''}, #'right': {'item': LabelItem('right'), 'pos': (3, 4), 'text': '', 'units': '', 'unitPrefix': ''} #} #self.labels['left']['item'].setAngle(-90) #self.labels['right']['item'].setAngle(-90) #for k in self.labels: #self.layout.addItem(self.labels[k]['item'], *self.labels[k]['pos']) self.titleLabel = LabelItem('', size='11pt') self.layout.addItem(self.titleLabel, 0, 1) self.setTitle(None) ## hide for i in range(4): self.layout.setRowPreferredHeight(i, 0) self.layout.setRowMinimumHeight(i, 0) self.layout.setRowSpacing(i, 0) self.layout.setRowStretchFactor(i, 1) for i in range(3): self.layout.setColumnPreferredWidth(i, 0) self.layout.setColumnMinimumWidth(i, 0) self.layout.setColumnSpacing(i, 0) self.layout.setColumnStretchFactor(i, 1) self.layout.setRowStretchFactor(2, 100) self.layout.setColumnStretchFactor(1, 100) ## Wrap a few methods from viewBox for m in [ 'setXRange', 'setYRange', 'setRange', 'autoRange', 'viewRect', 'setMouseEnabled' ]: setattr(self, m, getattr(self.vb, m)) self.items = [] self.curves = [] self.dataItems = [] self.paramList = {} self.avgCurves = {} ### Set up context menu w = QtGui.QWidget() self.ctrl = c = Ui_Form() c.setupUi(w) dv = QtGui.QDoubleValidator(self) self.ctrlMenu = QtGui.QMenu() self.menuAction = QtGui.QWidgetAction(self) self.menuAction.setDefaultWidget(w) self.ctrlMenu.addAction(self.menuAction) if HAVE_WIDGETGROUP: self.stateGroup = WidgetGroup(self.ctrlMenu) self.fileDialog = None self.xLinkPlot = None self.yLinkPlot = None self.linksBlocked = False #self.ctrlBtn.setFixedWidth(60) self.setAcceptHoverEvents(True) ## Connect control widgets #QtCore.QObject.connect(c.xMinText, QtCore.SIGNAL('editingFinished()'), self.setManualXScale) c.xMinText.editingFinished.connect(self.setManualXScale) #QtCore.QObject.connect(c.xMaxText, QtCore.SIGNAL('editingFinished()'), self.setManualXScale) c.xMaxText.editingFinished.connect(self.setManualXScale) #QtCore.QObject.connect(c.yMinText, QtCore.SIGNAL('editingFinished()'), self.setManualYScale) c.yMinText.editingFinished.connect(self.setManualYScale) #QtCore.QObject.connect(c.yMaxText, QtCore.SIGNAL('editingFinished()'), self.setManualYScale) c.yMaxText.editingFinished.connect(self.setManualYScale) #QtCore.QObject.connect(c.xManualRadio, QtCore.SIGNAL('clicked()'), self.updateXScale) c.xManualRadio.clicked.connect(lambda: self.updateXScale()) #QtCore.QObject.connect(c.yManualRadio, QtCore.SIGNAL('clicked()'), self.updateYScale) c.yManualRadio.clicked.connect(lambda: self.updateYScale()) #QtCore.QObject.connect(c.xAutoRadio, QtCore.SIGNAL('clicked()'), self.updateXScale) c.xAutoRadio.clicked.connect(self.updateXScale) #QtCore.QObject.connect(c.yAutoRadio, QtCore.SIGNAL('clicked()'), self.updateYScale) c.yAutoRadio.clicked.connect(self.updateYScale) #QtCore.QObject.connect(c.xAutoPercentSpin, QtCore.SIGNAL('valueChanged(int)'), self.replot) c.xAutoPercentSpin.valueChanged.connect(self.replot) #QtCore.QObject.connect(c.yAutoPercentSpin, QtCore.SIGNAL('valueChanged(int)'), self.replot) c.yAutoPercentSpin.valueChanged.connect(self.replot) #QtCore.QObject.connect(c.xLogCheck, QtCore.SIGNAL('toggled(bool)'), self.setXLog) #QtCore.QObject.connect(c.yLogCheck, QtCore.SIGNAL('toggled(bool)'), self.setYLog) #QtCore.QObject.connect(c.alphaGroup, QtCore.SIGNAL('toggled(bool)'), self.updateAlpha) c.alphaGroup.toggled.connect(self.updateAlpha) #QtCore.QObject.connect(c.alphaSlider, QtCore.SIGNAL('valueChanged(int)'), self.updateAlpha) c.alphaSlider.valueChanged.connect(self.updateAlpha) #QtCore.QObject.connect(c.autoAlphaCheck, QtCore.SIGNAL('toggled(bool)'), self.updateAlpha) c.autoAlphaCheck.toggled.connect(self.updateAlpha) #QtCore.QObject.connect(c.gridGroup, QtCore.SIGNAL('toggled(bool)'), self.updateGrid) c.gridGroup.toggled.connect(self.updateGrid) #QtCore.QObject.connect(c.gridAlphaSlider, QtCore.SIGNAL('valueChanged(int)'), self.updateGrid) c.gridAlphaSlider.valueChanged.connect(self.updateGrid) #QtCore.QObject.connect(c.powerSpectrumGroup, QtCore.SIGNAL('toggled(bool)'), self.updateSpectrumMode) c.powerSpectrumGroup.toggled.connect(self.updateSpectrumMode) #QtCore.QObject.connect(c.saveSvgBtn, QtCore.SIGNAL('clicked()'), self.saveSvgClicked) c.saveSvgBtn.clicked.connect(self.saveSvgClicked) #QtCore.QObject.connect(c.saveImgBtn, QtCore.SIGNAL('clicked()'), self.saveImgClicked) c.saveImgBtn.clicked.connect(self.saveImgClicked) #QtCore.QObject.connect(c.saveCsvBtn, QtCore.SIGNAL('clicked()'), self.saveCsvClicked) c.saveCsvBtn.clicked.connect(self.saveCsvClicked) #QtCore.QObject.connect(c.gridGroup, QtCore.SIGNAL('toggled(bool)'), self.updateGrid) #QtCore.QObject.connect(c.gridAlphaSlider, QtCore.SIGNAL('valueChanged(int)'), self.updateGrid) #QtCore.QObject.connect(self.ctrl.xLinkCombo, QtCore.SIGNAL('currentIndexChanged(int)'), self.xLinkComboChanged) self.ctrl.xLinkCombo.currentIndexChanged.connect( self.xLinkComboChanged) #QtCore.QObject.connect(self.ctrl.yLinkCombo, QtCore.SIGNAL('currentIndexChanged(int)'), self.yLinkComboChanged) self.ctrl.yLinkCombo.currentIndexChanged.connect( self.yLinkComboChanged) #QtCore.QObject.connect(c.downsampleSpin, QtCore.SIGNAL('valueChanged(int)'), self.updateDownsampling) c.downsampleSpin.valueChanged.connect(self.updateDownsampling) #QtCore.QObject.connect(self.ctrl.avgParamList, QtCore.SIGNAL('itemClicked(QListWidgetItem*)'), self.avgParamListClicked) self.ctrl.avgParamList.itemClicked.connect(self.avgParamListClicked) #QtCore.QObject.connect(self.ctrl.averageGroup, QtCore.SIGNAL('toggled(bool)'), self.avgToggled) self.ctrl.averageGroup.toggled.connect(self.avgToggled) #QtCore.QObject.connect(self.ctrl.pointsGroup, QtCore.SIGNAL('toggled(bool)'), self.updatePointMode) #QtCore.QObject.connect(self.ctrl.autoPointsCheck, QtCore.SIGNAL('toggled(bool)'), self.updatePointMode) #QtCore.QObject.connect(self.ctrl.maxTracesCheck, QtCore.SIGNAL('toggled(bool)'), self.updateDecimation) self.ctrl.maxTracesCheck.toggled.connect(self.updateDecimation) #QtCore.QObject.connect(self.ctrl.maxTracesSpin, QtCore.SIGNAL('valueChanged(int)'), self.updateDecimation) self.ctrl.maxTracesSpin.valueChanged.connect(self.updateDecimation) #QtCore.QObject.connect(c.xMouseCheck, QtCore.SIGNAL('toggled(bool)'), self.mouseCheckChanged) c.xMouseCheck.toggled.connect(self.mouseCheckChanged) #QtCore.QObject.connect(c.yMouseCheck, QtCore.SIGNAL('toggled(bool)'), self.mouseCheckChanged) c.yMouseCheck.toggled.connect(self.mouseCheckChanged) self.xLinkPlot = None self.yLinkPlot = None self.linksBlocked = False self.manager = None #self.showLabel('right', False) #self.showLabel('top', False) #self.showLabel('title', False) #self.showLabel('left', False) #self.showLabel('bottom', False) self.showScale('right', False) self.showScale('top', False) self.showScale('left', True) self.showScale('bottom', True) if name is not None: self.registerPlot(name) if labels is not None: for k in labels: if isinstance(labels[k], basestring): labels[k] = (labels[k], ) self.setLabel(k, *labels[k]) if len(kargs) > 0: self.plot(**kargs)
def __init__(self, xmin, xmax, ymax, parent=None, name=None, labels=None, **kargs): # xmin, xmax, ymax, QtGui.QGraphicsWidget.__init__(self, parent) ## Set up control buttons self.ctrlBtn = QtGui.QToolButton() self.ctrlBtn.setIcon(QtGui.QIcon('gui/icons/configure_shortcuts.png')) self.autoBtn = QtGui.QToolButton() self.autoBtn.setIcon(QtGui.QIcon('gui/icons/zoom_fit_best.png')) self.ctrlBtn.clicked.connect(self.ctrlBtnClicked) self.autoBtn.clicked.connect(self.enableAutoScale) stylesheet = ''' QToolBar { background: qlineargradient(x1: 0, y1:0, x2: 1, y2: 1, stop: 0 #a6a6a6, stop: 0.08 #7f7f7f, stop: 0.39999 #717171, stop: 0.4 #626262, stop: 0.9 #4c4c4c, stop: 1 #333333); spacing: 10px; /* spacing between items in the tool bar */ }''' self.toolBar = QtGui.QToolBar() self.toolBar.setStyleSheet(stylesheet) self.toolBar.addWidget(self.ctrlBtn) self.toolBar.addWidget(self.autoBtn) self.layout = QtGui.QGraphicsGridLayout() self.layout.setContentsMargins(1, 1, 1, 1) self.setLayout(self.layout) self.layout.setHorizontalSpacing(0) self.layout.setVerticalSpacing(0) self.vb = ViewBox(xmin, xmax, ymax) #xmin, xmax, ymax #QtCore.QObject.connect(self.vb, QtCore.SIGNAL('xRangeChangedc'), self.xRangeChanged) self.vb.sigXRangeChanged.connect(self.xRangeChanged) #QtCore.QObject.connect(self.vb, QtCore.SIGNAL('yRangeChanged'), self.yRangeChanged) self.vb.sigYRangeChanged.connect(self.yRangeChanged) #QtCore.QObject.connect(self.vb, QtCore.SIGNAL('rangeChangedManually'), self.enableManualScale) self.vb.sigRangeChangedManually.connect(self.enableManualScale) #QtCore.QObject.connect(self.vb, QtCore.SIGNAL('viewChanged'), self.viewChanged) self.vb.sigRangeChanged.connect(self.viewRangeChanged) self.layout.addItem(self.vb, 2, 1) self.alpha = 1.0 self.autoAlpha = True self.spectrumMode = False self.autoScale = [True, True] ## Create and place scale items self.scales = { 'top': { 'item': ScaleItem(orientation='top', linkView=self.vb), 'pos': (1, 1) }, 'bottom': { 'item': ScaleItem(orientation='bottom', linkView=self.vb), 'pos': (3, 1) }, 'left': { 'item': ScaleItem(orientation='left', linkView=self.vb), 'pos': (2, 0) }, 'right': { 'item': ScaleItem(orientation='right', linkView=self.vb), 'pos': (2, 2) } } for k in self.scales: #self.scales[k]['item'].setGrid(False) self.layout.addItem(self.scales[k]['item'], *self.scales[k]['pos']) self.titleLabel = LabelItem('', size='11pt', color='000') self.layout.addItem(self.titleLabel, 0, 1) #self.setTitle(None) ## hide for i in range(4): self.layout.setRowPreferredHeight(i, 0) self.layout.setRowMinimumHeight(i, 0) self.layout.setRowSpacing(i, 0) self.layout.setRowStretchFactor(i, 1) for i in range(3): self.layout.setColumnPreferredWidth(i, 0) self.layout.setColumnMinimumWidth(i, 0) self.layout.setColumnSpacing(i, 0) self.layout.setColumnStretchFactor(i, 1) self.layout.setRowStretchFactor(2, 100) self.layout.setColumnStretchFactor(1, 100) ## Wrap a few methods from viewBox for m in [ 'setXRange', 'setYRange', 'setRange', 'autoRange', 'viewRect', 'setMouseEnabled' ]: setattr(self, m, getattr(self.vb, m)) self.items = [] self.curves = [] self.dataItems = [] self.paramList = {} self.avgCurves = {} ### Set up context menu w = QtGui.QWidget() self.ctrl = c = Ui_Form() c.setupUi(w) dv = QtGui.QDoubleValidator(self) self.ctrlMenu = QtGui.QMenu() self.menuAction = QtGui.QWidgetAction(self) self.menuAction.setDefaultWidget(w) self.ctrlMenu.addAction(self.menuAction) if HAVE_WIDGETGROUP: self.stateGroup = WidgetGroup(self.ctrlMenu) self.fileDialog = None self.xLinkPlot = None self.yLinkPlot = None self.linksBlocked = False #self.ctrlBtn.setFixedWidth(60) self.setAcceptHoverEvents(True) ## Connect control widgets #QtCore.QObject.connect(c.xMinText, QtCore.SIGNAL('editingFinished()'), self.setManualXScale) c.xMinText.editingFinished.connect(self.setManualXScale) #QtCore.QObject.connect(c.xMaxText, QtCore.SIGNAL('editingFinished()'), self.setManualXScale) c.xMaxText.editingFinished.connect(self.setManualXScale) #QtCore.QObject.connect(c.yMinText, QtCore.SIGNAL('editingFinished()'), self.setManualYScale) c.yMinText.editingFinished.connect(self.setManualYScale) #QtCore.QObject.connect(c.yMaxText, QtCore.SIGNAL('editingFinished()'), self.setManualYScale) c.yMaxText.editingFinished.connect(self.setManualYScale) #QtCore.QObject.connect(c.xManualRadio, QtCore.SIGNAL('clicked()'), self.updateXScale) c.xManualRadio.clicked.connect(lambda: self.updateXScale()) #QtCore.QObject.connect(c.yManualRadio, QtCore.SIGNAL('clicked()'), self.updateYScale) c.yManualRadio.clicked.connect(lambda: self.updateYScale()) #QtCore.QObject.connect(c.xAutoRadio, QtCore.SIGNAL('clicked()'), self.updateXScale) c.xAutoRadio.clicked.connect(self.updateXScale) #QtCore.QObject.connect(c.yAutoRadio, QtCore.SIGNAL('clicked()'), self.updateYScale) c.yAutoRadio.clicked.connect(self.updateYScale) #QtCore.QObject.connect(c.xAutoPercentSpin, QtCore.SIGNAL('valueChanged(int)'), self.replot) c.xAutoPercentSpin.valueChanged.connect(self.replot) #QtCore.QObject.connect(c.yAutoPercentSpin, QtCore.SIGNAL('valueChanged(int)'), self.replot) c.yAutoPercentSpin.valueChanged.connect(self.replot) #QtCore.QObject.connect(c.xLogCheck, QtCore.SIGNAL('toggled(bool)'), self.setXLog) #QtCore.QObject.connect(c.yLogCheck, QtCore.SIGNAL('toggled(bool)'), self.setYLog) #QtCore.QObject.connect(c.alphaGroup, QtCore.SIGNAL('toggled(bool)'), self.updateAlpha) c.alphaGroup.toggled.connect(self.updateAlpha) #QtCore.QObject.connect(c.alphaSlider, QtCore.SIGNAL('valueChanged(int)'), self.updateAlpha) c.alphaSlider.valueChanged.connect(self.updateAlpha) #QtCore.QObject.connect(c.autoAlphaCheck, QtCore.SIGNAL('toggled(bool)'), self.updateAlpha) c.autoAlphaCheck.toggled.connect(self.updateAlpha) #QtCore.QObject.connect(c.gridGroup, QtCore.SIGNAL('toggled(bool)'), self.updateGrid) c.gridGroup.toggled.connect(self.updateGrid) #QtCore.QObject.connect(c.gridAlphaSlider, QtCore.SIGNAL('valueChanged(int)'), self.updateGrid) c.gridAlphaSlider.valueChanged.connect(self.updateGrid) #QtCore.QObject.connect(c.powerSpectrumGroup, QtCore.SIGNAL('toggled(bool)'), self.updateSpectrumMode) c.powerSpectrumGroup.toggled.connect(self.updateSpectrumMode) #QtCore.QObject.connect(c.saveSvgBtn, QtCore.SIGNAL('clicked()'), self.saveSvgClicked) c.saveSvgBtn.clicked.connect(self.saveSvgClicked) #QtCore.QObject.connect(c.saveImgBtn, QtCore.SIGNAL('clicked()'), self.saveImgClicked) c.saveImgBtn.clicked.connect(self.saveImgClicked) #QtCore.QObject.connect(c.saveCsvBtn, QtCore.SIGNAL('clicked()'), self.saveCsvClicked) c.saveCsvBtn.clicked.connect(self.saveCsvClicked) #QtCore.QObject.connect(c.gridGroup, QtCore.SIGNAL('toggled(bool)'), self.updateGrid) #QtCore.QObject.connect(c.gridAlphaSlider, QtCore.SIGNAL('valueChanged(int)'), self.updateGrid) #QtCore.QObject.connect(self.ctrl.xLinkCombo, QtCore.SIGNAL('currentIndexChanged(int)'), self.xLinkComboChanged) self.ctrl.xLinkCombo.currentIndexChanged.connect( self.xLinkComboChanged) #QtCore.QObject.connect(self.ctrl.yLinkCombo, QtCore.SIGNAL('currentIndexChanged(int)'), self.yLinkComboChanged) self.ctrl.yLinkCombo.currentIndexChanged.connect( self.yLinkComboChanged) #QtCore.QObject.connect(c.downsampleSpin, QtCore.SIGNAL('valueChanged(int)'), self.updateDownsampling) c.downsampleSpin.valueChanged.connect(self.updateDownsampling) #QtCore.QObject.connect(self.ctrl.avgParamList, QtCore.SIGNAL('itemClicked(QListWidgetItem*)'), self.avgParamListClicked) self.ctrl.avgParamList.itemClicked.connect(self.avgParamListClicked) #QtCore.QObject.connect(self.ctrl.averageGroup, QtCore.SIGNAL('toggled(bool)'), self.avgToggled) self.ctrl.averageGroup.toggled.connect(self.avgToggled) #QtCore.QObject.connect(self.ctrl.pointsGroup, QtCore.SIGNAL('toggled(bool)'), self.updatePointMode) #QtCore.QObject.connect(self.ctrl.autoPointsCheck, QtCore.SIGNAL('toggled(bool)'), self.updatePointMode) #QtCore.QObject.connect(self.ctrl.maxTracesCheck, QtCore.SIGNAL('toggled(bool)'), self.updateDecimation) self.ctrl.maxTracesCheck.toggled.connect(self.updateDecimation) #QtCore.QObject.connect(self.ctrl.maxTracesSpin, QtCore.SIGNAL('valueChanged(int)'), self.updateDecimation) self.ctrl.maxTracesSpin.valueChanged.connect(self.updateDecimation) #QtCore.QObject.connect(c.xMouseCheck, QtCore.SIGNAL('toggled(bool)'), self.mouseCheckChanged) c.xMouseCheck.toggled.connect(self.mouseCheckChanged) #QtCore.QObject.connect(c.yMouseCheck, QtCore.SIGNAL('toggled(bool)'), self.mouseCheckChanged) c.yMouseCheck.toggled.connect(self.mouseCheckChanged) self.xLinkPlot = None self.yLinkPlot = None self.linksBlocked = False self.manager = None #self.showLabel('right', False) #self.showLabel('top', False) #self.showLabel('title', False) #self.showLabel('left', False) #self.showLabel('bottom', False) self.showScale('right', False) self.showScale('top', False) self.showScale('left', True) self.showScale('bottom', True) if name is not None: self.registerPlot(name) if labels is not None: for k in labels: if isinstance(labels[k], basestring): labels[k] = (labels[k], ) self.setLabel(k, *labels[k]) if len(kargs) > 0: self.plot(**kargs)