#!/usr/bin/env python
# The Python version of Qwt-5.0.0/examples/spectrogram
import sys
from PyQt4 import Qt
import PyQt4.Qwt5 as Qwt
class SpectrogramData(Qwt.QwtRasterData):
def __init__(self):
Qwt.QwtRasterData.__init__(self, Qt.QRectF(-1.5, -1.5, 3.0, 3.0))
# __init__()
def copy(self):
return self
# copy()
def range(self):
return Qwt.QwtDoubleInterval(0.0, 10.0);
# range()
def value(self, x, y):
c = 0.842;
v1 = x * x + (y-c) * (y+c);
v2 = x * (y+c) + x * (y+c);
return 1.0 / (v1 * v1 + v2 * v2);
# value()
# class SpectrogramData()
class Plot(Qwt.QwtPlot):
def __init__(self, parent = None):
Qwt.QwtPlot.__init__(self, parent)
self.__spectrogram = Qwt.QwtPlotSpectrogram()
colorMap = Qwt.QwtLinearColorMap(Qt.Qt.darkCyan, Qt.Qt.red)
colorMap.addColorStop(0.1, Qt.Qt.cyan)
colorMap.addColorStop(0.6, Qt.Qt.green)
colorMap.addColorStop(0.95, Qt.Qt.yellow)
self.__spectrogram.setColorMap(colorMap)
self.__spectrogram.setData(SpectrogramData())
self.__spectrogram.attach(self)
self.__spectrogram.setContourLevels(
[0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5])
rightAxis = self.axisWidget(Qwt.QwtPlot.yRight)
rightAxis.setTitle("Intensity")
rightAxis.setColorBarEnabled(True)
rightAxis.setColorMap(self.__spectrogram.data().range(),
self.__spectrogram.colorMap())
self.setAxisScale(Qwt.QwtPlot.yRight,
self.__spectrogram.data().range().minValue(),
self.__spectrogram.data().range().maxValue())
self.enableAxis(Qwt.QwtPlot.yRight)
self.plotLayout().setAlignCanvasToScales(True)
self.replot()
# LeftButton for the zooming
# MidButton for the panning
# RightButton: zoom out by 1
# Ctrl+RighButton: zoom out to full size
zoomer = Qwt.QwtPlotZoomer(self.canvas())
zoomer.setMousePattern(Qwt.QwtEventPattern.MouseSelect2,
Qt.Qt.RightButton, Qt.Qt.ControlModifier)
zoomer.setMousePattern(Qwt.QwtEventPattern.MouseSelect3,
Qt.Qt.RightButton)
zoomer.setRubberBandPen(Qt.Qt.darkBlue)
zoomer.setTrackerPen(Qt.Qt.darkBlue)
panner = Qwt.QwtPlotPanner(self.canvas())
panner.setAxisEnabled(Qwt.QwtPlot.yRight, False)
panner.setMouseButton(Qt.Qt.MidButton)
# Avoid jumping when labels with more/less digits
# appear/disappear when scrolling vertically
fm = Qt.QFontMetrics(self.axisWidget(Qwt.QwtPlot.yLeft).font())
self.axisScaleDraw(
Qwt.QwtPlot.yLeft).setMinimumExtent(fm.width("100.00"))
# __init__()
def showContour(self, on):
self.__spectrogram.setDisplayMode(
Qwt.QwtPlotSpectrogram.ContourMode, on)
self.replot()
# showContour()
def showSpectrogram(self, on):
self.__spectrogram.setDisplayMode(Qwt.QwtPlotSpectrogram.ImageMode, on)
if on:
pen = Qt.QPen()
else:
pen = Qt.QPen(Qt.Qt.NoPen)
self.__spectrogram.setDefaultContourPen(pen)
self.replot();
# showSpectrogram()
# class Plot()
class MainWindow(Qt.QMainWindow):
def __init__(self, parent=None):
Qt.QMainWindow.__init__(self, parent)
plot = Plot()
self.setCentralWidget(plot)
toolBar = Qt.QToolBar(self)
btnSpectrogram = Qt.QToolButton(toolBar)
btnContour = Qt.QToolButton(toolBar)
btnSpectrogram.setText("Spectrogram")
btnSpectrogram.setCheckable(True)
btnSpectrogram.setToolButtonStyle(Qt.Qt.ToolButtonTextUnderIcon)
toolBar.addWidget(btnSpectrogram)
btnContour.setText("Contour");
btnContour.setCheckable(True)
btnContour.setToolButtonStyle(Qt.Qt.ToolButtonTextUnderIcon)
toolBar.addWidget(btnContour)
self.addToolBar(toolBar)
self.connect(btnSpectrogram, Qt.SIGNAL('toggled(bool)'),
plot.showSpectrogram)
self.connect(btnContour, Qt.SIGNAL('toggled(bool)'),
plot.showContour)
btnSpectrogram.setChecked(True)
btnContour.setChecked(False)
# __init__()
# MainWindow()
def make():
demo = MainWindow()
demo.resize(600, 400)
demo.show()
return demo
# make()
def main(args):
app = Qt.QApplication(args)
demo = make()
sys.exit(app.exec_())
# main()
# Admire
if __name__ == '__main__':
if 'settracemask' in sys.argv:
# for debugging, requires: python configure.py --trace ...
import sip
sip.settracemask(0x3f)
main(sys.argv)
# Local Variables: ***
# mode: python ***
# End: ***
|