Sophie

Sophie

distrib > Fedora > 14 > x86_64 > by-pkgid > bd70f6d32e1b4faed9479679ca660581 > files > 67

PyQwt-devel-5.2.0-10.fc14.i686.rpm

#!/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: ***