Sophie

Sophie

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

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

#!/usr/bin/env python
#
# Contributed by Darren Dale.

import sys
from PyQt4.Qt import *
from PyQt4.Qwt5 import *

try:
    import numpy as np
except ImportError:
    if not QCoreApplication.instance():
        a = QApplication([])
    QMessageBox.critical(
        None,
        'NumPy required',
        'This example requires NumPy, but failed to import NumPy.\n'
        'NumPy is available at http://sourceforge.net/projects/numpy'
        )
    raise SystemExit(
        'Failed to import NumPy.\n'
        'NumPy is available at http://sourceforge.net/projects/numpy'
        )


class PickerMachine(QwtPickerMachine):
   
    def __init__(self, *args):
        QwtPickerMachine.__init__(self, *args)

    # __init__()
   
    def transition(self, eventPattern,  e):
        commands = []
        # handle the mouse events
        if e.type() == QEvent.MouseButtonPress:
            if eventPattern.mouseMatch(QwtEventPattern.MouseSelect1, e):
                if self.state() == 0:
                    commands.append(QwtPickerMachine.Begin)
                    commands.append(QwtPickerMachine.Append)
                    self.setState(1)
        elif e.type() == QEvent.MouseMove:
            if self.state != 0:
                commands.append(Qwt.QwtPickerMachine.Append)
        elif e.type() == QEvent.MouseButtonRelease:
            commands.append(QwtPickerMachine.End)
            self.setState(0)
        # handling of the kayboard events is left as an excercise
        return commands

    # transition()
       
# class PickerMachine()         
   

class PlotPicker(QwtPlotPicker):
   
    def __init__(self,  *args):
        Qwt.QwtPlotPicker.__init__(self, *args)
        self.setSelectionFlags(QwtPicker.PolygonSelection)   
        # handle only mouse events coming from the left  mouse button
        self.setMousePattern(
            [QwtEventPattern.MousePattern(Qt.LeftButton, Qt.NoModifier)])


    # __init__()

    def drawRubberBand(self, painter):
       
        if (not self.isActive()
            or self.rubberBand() == QwtPicker.NoRubberBand
            or self.rubberBandPen().style() == Qt.NoPen
            ):
            return

        selection = self.selection()

        if (self.selectionFlags() & QwtPicker.PolygonSelection
            and self.rubberBand() == QwtPicker.PolygonRubberBand
            ):
            painter.drawPolygon(selection)

    # drawRubberBand()
    
    def stateMachine(self, flags):
        return PickerMachine()

    # stateMachine()
   
# class PlotPicker


def make():
    demo = QMainWindow()

    toolBar = QToolBar(demo)
    toolBar.addAction(QWhatsThis.createAction(toolBar))
    demo.addToolBar(toolBar)
    
    plot = QwtPlot(demo)
    demo.setCentralWidget(plot)
    plot.setTitle('Subclassing QwtPlotPicker Demo')
    plot.setCanvasBackground(Qt.white)
    plot.setWhatsThis(
        'Shows how to subclass QwtPlotPicker so that\n'
        'a PolygonRubberBand selection responds to\n'
        'left mouse button events.'
        )

    demo.resize(400, 400)
    demo.show()

    x = np.linspace(-2*np.pi, 2*np.pi, num=501)
    y = np.sin(x)*5
    curve = QwtPlotCurve()
    curve.setData(x,y)
    curve.setPen(QPen(Qt.red))
    curve.attach(plot)

    picker = PlotPicker(QwtPlot.xBottom,
                        QwtPlot.yLeft,
                        QwtPicker.PolygonSelection,
                        QwtPlotPicker.PolygonRubberBand,
                        QwtPicker.AlwaysOff,
                        plot.canvas())
    picker.setRubberBandPen(QPen(Qt.black, 1))
    slot = lambda polygon: QMessageBox.information(
        None, 'PlotPicker signaled', str(polygon))
    if PYQT_VERSION == 0x040500:
        # works around a bug in PyQt-4.5/sip-4.8
        picker.connect(picker, SIGNAL('selected(const QPolygon&)'), slot)
    else:
        picker.connect(picker, SIGNAL('selected(const QwtPolygon&)'), slot)
   
    QWhatsThis.enterWhatsThisMode()
    QWhatsThis.showText(
        demo.mapToGlobal(QPoint(200, 200)), plot.whatsThis(), demo)
    return demo

# make()


def main(args):
    app = 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: ***