示例#1
0
    def createDial(self, pos):
        dial = None
        if pos == 0:
            self.d_clock = Qwt.QwtAnalogClock()
            # disable minor ticks
            #d_clock.scaleDraw().setTickLength( QwtScaleDiv.MinorTick, 0 )
            knobColor = QColor(Qt.gray)  # .light( 130 )

            for i in range(Qwt.QwtAnalogClock.NHands):
                handColor = QColor(Qt.gray)  #.light( 150 )
                width = 8
                if i == Qwt.QwtAnalogClock.SecondHand:
                    handColor = Qt.gray
                    width = 5
                hand = Qwt.QwtDialSimpleNeedle(Qwt.QwtDialSimpleNeedle.Arrow,
                                               True, handColor, knobColor)
                hand.setWidth(width)
                self.d_clock.setHand(Qwt.QwtAnalogClock.Hand(i), hand)
            timer = QTimer(self.d_clock)
            timer.timeout.connect(self.d_clock.setCurrentTime)
            timer.start(1000)
            dial = self.d_clock
        elif pos == 1:
            self.d_speedo = SpeedoMeter(self)
            self.d_speedo.setScaleStepSize(20.0)
            self.d_speedo.setScale(0.0, 240.0)
            self.d_speedo.scaleDraw().setPenWidth(2)
            timer = QTimer(self.d_speedo)
            timer.timeout.connect(self.changeSpeed)
            timer.start(50)
            dial = self.d_speedo
        elif pos == 2:
            self.d_ai = AttitudeIndicator(self)
            self.d_ai.scaleDraw().setPenWidth(3)
            gradientTimer = QTimer(self.d_ai)
            gradientTimer.timeout.connect(self.changeGradient)
            gradientTimer.start(100)
            angleTimer = QTimer(self.d_ai)
            angleTimer.timeout.connect(self.changeAngle)
            angleTimer.start(100)
            dial = self.d_ai

        if (dial):
            dial.setReadOnly(True)
            dial.setLineWidth(4)
            dial.setFrameShadow(Qwt.QwtDial.Sunken)
        return dial
示例#2
0
    def __init__(self, parent=None):
        Qwt.QwtDial.__init__(self, parent)
        self.d_label = "km/h"
        scaleDraw = Qwt.QwtRoundScaleDraw()
        scaleDraw.setSpacing(8)
        scaleDraw.enableComponent(Qwt.QwtAbstractScaleDraw.Backbone, False)
        scaleDraw.setTickLength(Qwt.QwtScaleDiv.MinorTick, 0)
        scaleDraw.setTickLength(Qwt.QwtScaleDiv.MediumTick, 4)
        scaleDraw.setTickLength(Qwt.QwtScaleDiv.MajorTick, 8)
        self.setScaleDraw(scaleDraw)

        self.setWrapping(False)
        self.setReadOnly(True)

        self.setOrigin(135.0)
        self.setScaleArc(0.0, 270.0)

        needle = Qwt.QwtDialSimpleNeedle(Qwt.QwtDialSimpleNeedle.Arrow, True,
                                         Qt.red,
                                         QColor(Qt.gray))  #.light( 130 ) )
        self.setNeedle(needle)
示例#3
0
    def __init__(self, label="", min_val=-90, max_val=90, step=10, arc_bias=0, *args):
        gr.sync_block.__init__(self,name="QT Compass",in_sig=[numpy.float32],out_sig=[])
        Qt.QWidget.__init__(self, *args)

        # Set parameters
        self.update_period = 0.1
        self.last = time.time()
        self.next_angle = 0

        ### QT STUFF

        # Setup overall layouts
        self.this_layout = QtWidgets.QVBoxLayout(self)
        self.compass_layout = QtWidgets.QGridLayout()

        # Setup Dial
        self.dial = Qwt.QwtDial(self)
        self.dial.setOrigin(180+arc_bias) # Orient dial so 0 is at 9 o'clock
        self.dial.setScaleArc(float(min_val), float(max_val))
        scaleDraw = Qwt.QwtRoundScaleDraw()
        scaleDraw.setSpacing(8)
        scaleDraw.setTickLength(Qwt.QwtScaleDiv.MinorTick, 0)
        scaleDraw.setTickLength(Qwt.QwtScaleDiv.MediumTick, 4)
        scaleDraw.setTickLength(Qwt.QwtScaleDiv.MajorTick, 8)
        self.dial.setScaleDraw(scaleDraw)

        self.dial.setScale(min_val ,max_val)

        # Add needle
        self.dial.setNeedle(Qwt.QwtDialSimpleNeedle(
            Qwt.QwtDialSimpleNeedle.Arrow,
            True,
            QtGui.QColor(QtCore.Qt.red),
            QtGui.QColor(QtCore.Qt.gray).lighter(130)))
        self.dial.setValue(0)

        # Set sizing
        self.dial.setMinimumSize(250,250)
        self.dial.setSizePolicy(Qt.QSizePolicy.Expanding, Qt.QSizePolicy.Expanding)

        # Add to overall layout
        self.compass_layout.addWidget(self.dial,0,0)

        # Add label
        self.label = Qt.QLabel(label)
        font = QtGui.QFont()
        font.setPointSize(14)
        font.setBold(True)
        self.label.setFont(font)
        self.label.setAlignment(QtCore.Qt.AlignCenter)
        self.this_layout.addWidget(self.label)
        self.this_layout.addLayout(self.compass_layout)

        # Setup LCD
        lcd_layout = QtWidgets.QGridLayout()

        self.lcd = QtWidgets.QLCDNumber(self)
        sizePolicy = Qt.QSizePolicy(Qt.QSizePolicy.Preferred, Qt.QSizePolicy.Preferred)
        sizePolicy.setHeightForWidth(True)
        self.lcd.setSizePolicy(sizePolicy)
        self.lcd.setLineWidth(0)

        # Set sizing
        self.lcd.setMinimumHeight(self.dial.minimumHeight()/2)
        self.lcd.setMinimumWidth(self.dial.minimumWidth()/2)

        self.lcd.raise_() # Bring to front
        self.lcd.setDigitCount(3) # Max digits displayed
        self.lcd.setSmallDecimalPoint(True)
        self.lcd.display(123.4)
        self.this_layout.addLayout(lcd_layout)
        lcd_layout.addWidget(self.lcd,1,1,1,1)

        # Add spacers to center LCD
        spacerTop = QtWidgets.QSpacerItem(1,300,Qt.QSizePolicy.Maximum,Qt.QSizePolicy.Expanding)
        spacerSides = QtWidgets.QSpacerItem(220,1,Qt.QSizePolicy.Maximum,Qt.QSizePolicy.Expanding)
        spacerBottom = QtWidgets.QSpacerItem(1,150,Qt.QSizePolicy.Maximum,Qt.QSizePolicy.Expanding)
        # Top Spacers
        #lcd_layout.addItem(spacerTop,0,1,1,1)
        # Side Spacers
        lcd_layout.addItem(spacerSides,1,0,1,1)
        lcd_layout.addItem(spacerSides,1,2,1,1)
        # Bottom Spacers
        #lcd_layout.addItem(spacerBottom,2,1,1,1)

        self.label.raise_()

        # connect the plot callback signal
        self.valueChanged.connect(self.do_plot)
示例#4
0
    def createCompass(self, pos):
        palette0 = QPalette()
        for c in range(QPalette.NColorRoles):
            colorRole = QPalette.ColorRole(c)
            palette0.setColor(colorRole, QColor())

        #palette0.setColor( QPalette.Base, palette().color( QPalette.backgroundRole() ).light( 120 ) )
        palette0.setColor(QPalette.WindowText, palette0.color(QPalette.Base))

        compass = Qwt.QwtCompass(self)
        compass.setLineWidth(4)
        compass.setFrameShadow(Qwt.QwtCompass.Sunken)
        #    pos <= 2 ? QwtCompass.Sunken : QwtCompass.Raised )

        if pos == 0:
            #A compass with a rose and no needle. Scale and rose are rotating.
            compass.setMode(Qwt.QwtCompass.RotateScale)

            rose = Qwt.QwtSimpleCompassRose(16, 2)
            rose.setWidth(0.15)

            compass.setRose(rose)
        elif pos == 1:
            #A windrose, with a scale indicating the main directions only
            map = {}
            map[0.0] = "N"
            map[90.0] = "E"
            map[180.0] = "S"
            map[270.0] = "W"

            compass.setScaleDraw(Qwt.QwtCompassScaleDraw(map))

            rose = Qwt.QwtSimpleCompassRose(4, 1)
            compass.setRose(rose)

            compass.setNeedle(
                Qwt.QwtCompassWindArrow(Qwt.QwtCompassWindArrow.Style2))
            compass.setValue(60.0)
        elif pos == 2:
            #A compass with a rotating needle in darkBlue. Shows
            #a ticks for each degree.

            palette0.setColor(QPalette.Base, Qt.darkBlue)
            palette0.setColor(QPalette.WindowText,
                              QColor(Qt.darkBlue))  #.dark( 120 ) )
            palette0.setColor(QPalette.Text, Qt.white)

            scaleDraw = Qwt.QwtCompassScaleDraw()
            scaleDraw.enableComponent(Qwt.QwtAbstractScaleDraw.Ticks, True)
            scaleDraw.enableComponent(Qwt.QwtAbstractScaleDraw.Labels, True)
            scaleDraw.enableComponent(Qwt.QwtAbstractScaleDraw.Backbone, False)
            scaleDraw.setTickLength(Qwt.QwtScaleDiv.MinorTick, 1)
            scaleDraw.setTickLength(Qwt.QwtScaleDiv.MediumTick, 1)
            scaleDraw.setTickLength(Qwt.QwtScaleDiv.MajorTick, 3)

            compass.setScaleDraw(scaleDraw)

            compass.setScaleMaxMajor(36)
            compass.setScaleMaxMinor(5)

            compass.setNeedle(
                Qwt.QwtCompassMagnetNeedle(
                    Qwt.QwtCompassMagnetNeedle.ThinStyle))
            compass.setValue(220.0)
        elif pos == 3:
            #A compass without a frame, showing numbers as tick labels.
            #The origin is at 220.0
            palette0.setColor(QPalette.Base,
                              self.palette().color(self.backgroundRole()))
            palette0.setColor(QPalette.WindowText, Qt.blue)
            compass.setLineWidth(0)
            map = {}
            for d in range(0, 360, 60):
                map[d] = "%.0f" % (d * 1.0)

            scaleDraw = Qwt.QwtCompassScaleDraw(map)
            scaleDraw.enableComponent(Qwt.QwtAbstractScaleDraw.Ticks, True)
            scaleDraw.enableComponent(Qwt.QwtAbstractScaleDraw.Labels, True)
            scaleDraw.enableComponent(Qwt.QwtAbstractScaleDraw.Backbone, True)
            scaleDraw.setTickLength(Qwt.QwtScaleDiv.MinorTick, 0)
            scaleDraw.setTickLength(Qwt.QwtScaleDiv.MediumTick, 0)
            scaleDraw.setTickLength(Qwt.QwtScaleDiv.MajorTick, 3)
            compass.setScaleDraw(scaleDraw)
            compass.setScaleMaxMajor(36)
            compass.setScaleMaxMinor(5)
            compass.setNeedle(
                Qwt.QwtDialSimpleNeedle(Qwt.QwtDialSimpleNeedle.Ray, True,
                                        Qt.white))
            compass.setOrigin(220.0)
            compass.setValue(20.0)
        elif pos == 4:
            #A compass showing another needle
            scaleDraw = Qwt.QwtCompassScaleDraw()
            scaleDraw.enableComponent(Qwt.QwtAbstractScaleDraw.Ticks, True)
            scaleDraw.enableComponent(Qwt.QwtAbstractScaleDraw.Labels, True)
            scaleDraw.enableComponent(Qwt.QwtAbstractScaleDraw.Backbone, False)
            scaleDraw.setTickLength(Qwt.QwtScaleDiv.MinorTick, 0)
            scaleDraw.setTickLength(Qwt.QwtScaleDiv.MediumTick, 0)
            scaleDraw.setTickLength(Qwt.QwtScaleDiv.MajorTick, 3)
            compass.setScaleDraw(scaleDraw)
            compass.setNeedle(
                Qwt.QwtCompassMagnetNeedle(
                    Qwt.QwtCompassMagnetNeedle.TriangleStyle, Qt.white,
                    Qt.red))
            compass.setValue(220.0)
        elif pos == 5:
            #A compass with a yellow on black ray
            palette0.setColor(QPalette.WindowText, Qt.black)
            compass.setNeedle(
                Qwt.QwtDialSimpleNeedle(Qwt.QwtDialSimpleNeedle.Ray, False,
                                        Qt.yellow))
            compass.setValue(315.0)

        newPalette = compass.palette()
        for c in range(QPalette.NColorRoles):
            colorRole = QPalette.ColorRole(c)
            if (palette0.color(colorRole).isValid()):
                newPalette.setColor(colorRole, palette0.color(colorRole))

        for i in range(QPalette.NColorGroups):
            colorGroup = QPalette.ColorGroup(i)
            light = newPalette.color(colorGroup, QPalette.Base)  #.light( 170 )
            dark = newPalette.color(colorGroup, QPalette.Base)  #.dark( 170 )
            #mid = compass.frameShadow() == QwtDial.Raised
            #    ? newPalette.color( colorGroup, QPalette.Base ).dark( 110 )
            #    : newPalette.color( colorGroup, QPalette.Base ).light( 110 )
            mid = newPalette.color(colorGroup, QPalette.Base)  #.dark( 110 )
            newPalette.setColor(colorGroup, QPalette.Dark, dark)
            newPalette.setColor(colorGroup, QPalette.Mid, mid)
            newPalette.setColor(colorGroup, QPalette.Light, light)
        compass.setPalette(newPalette)
        return compass
示例#5
0
    def __init__(self):
        super(MyApp, self).__init__()
        # Set up the user interface from Designer.
        self.ui = Ui_mainWindow()
        self.ui.setupUi(self)

# ======= LOCAL WIDGET MODIFICATIONS ===============================================================

        spdMeter   = self.ui.SpeedDial
        spdLCD     = self.ui.SpeedLCD
        spdWheel   = self.ui.SpeedWheel
        thermo     = self.ui.Thermo
        thermSlide = self.ui.ThermoSlider
        compass    = self.ui.Compass
        counter    = self.ui.Counter
        global clk
        clk = self.ui.AnalogClock

        # SPEEDOMETER SETUP
        palette2 = QPalette()
        palette2.setColor(QPalette.Base, Qt.black)
        palette2.setColor(QPalette.WindowText, QColor(Qt.darkBlue))
        palette2.setColor(QPalette.Text, Qt.yellow)
        palette2.setColor(QPalette.Dark, Qt.darkGray)       # Bezel ring color 1
        palette2.setColor(QPalette.Light, Qt.lightGray)     # Bezel Ring Color 2
        spdMeter.setPalette(palette2)
        needle = Qwt.QwtDialSimpleNeedle(Qwt.QwtDialSimpleNeedle.Arrow, True, Qt.red, QtGui.QColor(Qt.gray))
        spdMeter.setNeedle(needle)

        # THERMO SETUP
        colorMap = Qwt.QwtLinearColorMap()
        colorMap.setColorInterval(Qt.blue, Qt.red)
        thermo.setColorMap(colorMap)

        # COMPASS SETUP
        palette0 = QPalette()
        palette0.setColor(QPalette.Base, Qt.darkBlue)
        palette0.setColor(QPalette.WindowText, QColor(Qt.darkBlue))
        palette0.setColor(QPalette.Text, Qt.yellow)
        palette0.setColor(QPalette.Dark, Qt.darkGray)       # Bezel ring color 1
        palette0.setColor(QPalette.Light, Qt.lightGray)     # Bezel Ring Color 2
        compass.setPalette(palette0)
        # Tick marks for each degree
        CompSclDrw = Qwt.QwtCompassScaleDraw()
        CompSclDrw.enableComponent(Qwt.QwtAbstractScaleDraw.Ticks, True)
        CompSclDrw.enableComponent(Qwt.QwtAbstractScaleDraw.Labels, True)
        CompSclDrw.enableComponent(Qwt.QwtAbstractScaleDraw.Backbone, False)
        CompSclDrw.setTickLength(Qwt.QwtScaleDiv.MinorTick, 0)
        CompSclDrw.setTickLength(Qwt.QwtScaleDiv.MediumTick, 0)
        CompSclDrw.setTickLength(Qwt.QwtScaleDiv.MajorTick, 5)
        compass.setScaleDraw(CompSclDrw)
        compass.setNeedle(Qwt.QwtCompassMagnetNeedle(Qwt.QwtCompassMagnetNeedle.ThinStyle, Qt.darkBlue, Qt.red))

        # ANALOG CLOCK SETUP
        palette1 = QPalette()
        palette1.setColor(QPalette.Base, Qt.black)           # Clock number ring background
        palette1.setColor(QPalette.Text, Qt.yellow)          # Clock numbers color
        palette1.setColor(QPalette.Foreground, Qt.darkBlue)  # Inner Ring Color
        palette1.setColor(QPalette.Dark, Qt.darkGray)        # Bezel ring color 1
        palette1.setColor(QPalette.Light, Qt.lightGray)      # Bezel Ring Color 2
        clk.setPalette(palette1)
        # Disable minor ticks
        ClkSclDrw = Qwt.QwtRoundScaleDraw()
        ClkSclDrw.setTickLength(Qwt.QwtScaleDiv.MinorTick, 0)
        # Set color of clock hands
        knobColor = QColor(Qt.gray)
        for i in range(clk.NHands):
            handColor = QColor(Qt.gray)
            width = 8
            if i == clk.SecondHand:
                handColor = Qt.red
                knobColor = QColor(Qt.darkRed)
                width = 5
            hand = Qwt.QwtDialSimpleNeedle(Qwt.QwtDialSimpleNeedle.Arrow, True, handColor, knobColor)
            hand.setWidth(width)
            clk.setHand(clk.Hand(i), hand)

# ======= WIDGET CONNECTIONS =======================================================================

        spdMeter.setValue(self.ui.SpeedWheel.value())
        spdWheel.valueChanged['double'].connect(spdMeter.setValue)
        spdWheel.valueChanged['double'].connect(spdLCD.display)
        thermSlide.valueChanged['double'].connect(thermo.setValue)
        counter.valueChanged['double'].connect(compass.setValue)

# =======  SINE WAVE PLOT SETUP ====================================================================

        global ampKnob, frqKnob, maxPts, n, angle, xData, yData, curve, plot, deg
        ampKnob = self.ui.AmpKnob                # Amplitude knob object
        frqKnob = self.ui.FreqKnob               # Frequency knob object
        maxPts = 250                             # X axis range for plots
        xData = np.zeros(1, dtype=np.uint16)     # Buffer for x data
        yData = np.zeros(1, dtype=np.float32)    # Buffer for y Data
        n = 0                                    # loop counter and base for frequency steps
        angle = 0                                # Rotation angle along X axis for plots
        deg = u'\N{DEGREE SIGN}'
        plot = self.ui.qwtPlot                   # Plot object
        # plot.setTitle("SINE WAVE PLOT")
        # plot.insertLegend(Qwt.QwtLegend())
        plot.setCanvasBackground(Qt.black)
        plot.setAxisScale(2, 0, maxPts, 50)      # X bottom axis
        plot.setAxisMaxMinor(2, 5)
        plot.setAxisScale(0, -10, 10, 2)         # Y Left Axis
        plot.setAxisMaxMinor(0, 2)
        grid = Qwt.QwtPlotGrid()
        grid.setPen(Qt.darkGray, 0, Qt.DotLine)
        grid.attach(plot)
        curve = Qwt.QwtPlotCurve()
        # curve.setTitle("Some Points")
        curve.attach(plot)
        curve.setPen(Qt.yellow, 2)
        curve.setRenderHint(Qwt.QwtPlotItem.RenderAntialiased, True)
        # Start the loop function
        update()