Exemple #1
0
    def drawFilledPolygon(self, outlinePenWidth=0):
        """Fill polygon with gradiant colors, polygon created through createPolygonPie"""
        painter = QPainter(self)
        painter.setRenderHint(QPainter.Antialiasing)
        # Position in middle of the widget
        painter.translate(self.width() / 2, self.height() / 2)
        painter.setPen(Qt.NoPen)
        self.pen.setWidth(0)
        if outlinePenWidth > 0:
            painter.setPen(self.pen)

        coloredScalePolygon = self.createPloygonPie(
            ((self.widgetDiameter / 2) -
             (self.pen.width() / 2)) * self.outerRadiusFactor,
            (((self.widgetDiameter / 2) -
              (self.pen.width() / 2)) * self.innerRadiusFactor),
            self.scaleAngleStartValue, self.scaleAngleSize)

        grad = QConicalGradient(
            QPointF(0, 0), -self.scaleAngleSize - self.scaleAngleStartValue +
            self.angleOffset - 1)

        # set gradiant colors
        for eachcolor in self.scalePolygonColors:
            grad.setColorAt(eachcolor[0], eachcolor[1])
        painter.setBrush(grad)
        painter.drawPolygon(coloredScalePolygon)
Exemple #2
0
    def __init__(self,
                 title,
                 unit,
                 tmin,
                 tmax,
                 green,
                 yellow,
                 red,
                 pc,
                 parent=None):
        QWidget.__init__(self, parent)
        self.min = tmin
        self.max = tmax
        self.speed = tmin
        self.pc = pc
        self.displayPowerPath = True
        self.title = title
        self.power = 100.0 * (self.speed - self.min) / (self.max - self.min)

        self.powerGradient = QConicalGradient(0, 0, 180)
        self.powerGradient.setColorAt(red, Qt.red)
        self.powerGradient.setColorAt(yellow, Qt.yellow)
        self.powerGradient.setColorAt(green, Qt.green)
        self.unitTextColor = QColor(Qt.black)
        self.speedTextColor = QColor(Qt.black)
        self.powerPathColor = QColor(Qt.gray)
        self.unit = unit
Exemple #3
0
    def drawGaugeAnnulus(self, outlinePenWith=0):
        if not self.gaugeColors == None:
            gaugeAnnulus = QPainter(self)
            gaugeAnnulus.setRenderHint(QPainter.Antialiasing)
            gaugeAnnulus.translate(self.width() / 2, self.height() / 2)

            gaugeAnnulus.setPen(Qt.NoPen)

            self.pen.setWidth(outlinePenWith)
            if outlinePenWith > 0:
                gaugeAnnulus.setPen(self.pen)

            coloredScalePolygon = self.drawGauge(
                ((self.widgetDiameter / 2) -
                 (self.pen.width() / 2)) * self.gaugeOuterRadius,
                (((self.widgetDiameter / 2) -
                  (self.pen.width() / 2)) * self.gaugeInnerRadius),
                self.gaugeRotation, self.gaugeArcAngle)

            gradient = QConicalGradient(
                QPointF(0, 0), -self.gaugeArcAngle - self.gaugeRotation + -1)

            for eachcolor in self.gaugeColors:
                gradient.setColorAt(eachcolor[0], eachcolor[1])

            gaugeAnnulus.setBrush(gradient)
            gaugeAnnulus.drawPolygon(coloredScalePolygon)
Exemple #4
0
    def brushChanged(self):
        style = Qt.BrushStyle(self.brushStyleComboBox.itemData(
                self.brushStyleComboBox.currentIndex(), IdRole))

        if style == Qt.LinearGradientPattern:
            linearGradient = QLinearGradient(0, 0, 100, 100)
            linearGradient.setColorAt(0.0, Qt.white)
            linearGradient.setColorAt(0.2, Qt.green)
            linearGradient.setColorAt(1.0, Qt.black)
            self.renderArea.setBrush(QBrush(linearGradient))
        elif style == Qt.RadialGradientPattern:
            radialGradient = QRadialGradient(50, 50, 50, 70, 70)
            radialGradient.setColorAt(0.0, Qt.white)
            radialGradient.setColorAt(0.2, Qt.green)
            radialGradient.setColorAt(1.0, Qt.black)
            self.renderArea.setBrush(QBrush(radialGradient))
        elif style == Qt.ConicalGradientPattern:
            conicalGradient = QConicalGradient(50, 50, 150)
            conicalGradient.setColorAt(0.0, Qt.white)
            conicalGradient.setColorAt(0.2, Qt.green)
            conicalGradient.setColorAt(1.0, Qt.black)
            self.renderArea.setBrush(QBrush(conicalGradient))
        elif style == Qt.TexturePattern:
            self.renderArea.setBrush(QBrush(QPixmap(':/images/brick.png')))
        else:
            self.renderArea.setBrush(QBrush(Qt.green, style))
	def paint(self, painter, option, widget):
		# 0,0 is RWY THR and drawing down
		ILS_colour = settings.colour('LDG_guide_ILS')
		noILS_colour = settings.colour('LDG_guide_noILS')
		ILS_pen = new_pen(ILS_colour)
		noILS_pen = new_pen(noILS_colour)
		ILS_brush = QBrush(ILS_colour)
		noILS_brush = QBrush(noILS_colour)
		## Centre line
		painter.setPen(noILS_pen if self.runway.LOC_range == None else ILS_pen)
		painter.drawLine(QPointF(0, LOC_line_RWY_sep_dist), QPointF(0, self.runway.param_disp_line_length))
		## GS altitude marks
		if self.scene().show_slope_altitudes:
			alt_step = self.GS_init_step
			dthr_dist = self.GS_init_dist
			while dthr_dist <= self.runway.param_disp_line_length:
				if dthr_dist < self.draw_GS_up_to:
					painter.setPen(ILS_pen)
					painter.setBrush(ILS_brush)
				else:
					painter.setPen(noILS_pen)
					painter.setBrush(noILS_brush)
				y = dthr_dist - self.dthr_NM
				for i in range(alt_step % 5):
					painter.drawLine(QPointF(-.12, y), QPointF(.12, y))
					y += slope_tick_spacing
				hw = .6 * slope_tick_spacing # slope diamond half width
				for i in range(alt_step // 5):
					painter.drawPolygon(QPointF(-.15, y), QPointF(0, y - hw), QPointF(.15, y), QPointF(0, y + hw))
					y += slope_tick_spacing
				alt_step += 1
				dthr_dist += self.GS_step_dist
		## Interception cone
		if self.runway.LOC_range != None and self.scene().show_interception_cones:
			cone_gradient = QConicalGradient(QPointF(0, 0), 270 - 2 * intercept_cone_half_angle)
			r = intercept_cone_half_angle / 180
			cone_gradient.setColorAt(0, ILS_colour)
			cone_gradient.setColorAt(.9 * r, Qt.transparent)
			cone_gradient.setColorAt(1.1 * r, Qt.transparent)
			cone_gradient.setColorAt(2 * r, ILS_colour)
			cone_brush = QBrush(cone_gradient)
			painter.setPen(Qt.NoPen)
			painter.setBrush(cone_brush)
			p1 = QPointF(-self.draw_cone_half_width, self.runway.LOC_range)
			p2 = QPointF(self.draw_cone_half_width, self.runway.LOC_range)
			painter.drawPolygon(p1, QPointF(0, 0), p2)
		## Marker beacons
		for md, ls, hl in (self.draw_OM, Qt.DashLine, .4), (self.draw_MM, Qt.DashDotLine, .25), (self.draw_IM, Qt.DotLine, .1):
			if md != None:
				painter.setPen(new_pen(ILS_colour, width=2, style=ls))
				painter.drawLine(QPointF(-hl, md), QPointF(hl, md))
Exemple #6
0
    def slotBrush(self, value):
        color = self.brushColorFrame.palette().color(QPalette.Window)
        style = Qt.BrushStyle(
            self.brushStyleComboBox.itemData(value, Qt.UserRole))

        if (style == Qt.LinearGradientPattern):
            linearGradient = QLinearGradient(0, 0, 400, 400)
            linearGradient.setColorAt(0.0, Qt.white)
            linearGradient.setColorAt(0.2, color)
            linearGradient.setColorAt(1.0, Qt.black)
            self.area.setBrush(linearGradient)
        elif style == Qt.RadialGradientPattern:
            radialGradient = QRadialGradient(200, 200, 80, 70, 70)
            radialGradient.setColorAt(0.0, Qt.white)
            radialGradient.setColorAt(0.2, Qt.green)
            radialGradient.setColorAt(1.0, Qt.black)
            self.area.setBrush(radialGradient)
        elif (style == Qt.ConicalGradientPattern):
            conicalGradient = QConicalGradient(200, 200, 30)
            conicalGradient.setColorAt(0.0, Qt.white)
            conicalGradient.setColorAt(0.2, color)
            conicalGradient.setColorAt(1.0, Qt.black)
            self.area.setBrush(conicalGradient)
        elif (style == Qt.TexturePattern):
            self.area.setBrush(QBrush(QPixmap("images/brick.png")))
        else:
            self.area.setBrush(QBrush(color, style))
Exemple #7
0
    def paintEvent(self, event):
        painter = QPainter(self)
        painter.setPen(QPen(Qt.red, 4, Qt.SolidLine))

        conicalGradient = QConicalGradient(QPoint(100, 100), 10)
        conicalGradient.setColorAt(0.0, Qt.red)
        conicalGradient.setColorAt(0.8, Qt.green)
        conicalGradient.setColorAt(1.0, Qt.yellow)

        painter.setBrush(QBrush(conicalGradient))
        painter.drawRect(10, 10, 200, 300)
Exemple #8
0
    def paintEvent(self, ev=None):
        drawing_rect = QRect()
        drawing_rect.setX(self._padding)
        drawing_rect.setY(self._padding)
        drawing_rect.setWidth(self._size)
        drawing_rect.setHeight(self._size)

        painter = QPainter(self)
        painter.setRenderHint(QPainter.Antialiasing)

        gradient = QConicalGradient()
        gradient.setCenter(drawing_rect.center())
        gradient.setAngle(-self._angle - self._size / 10)
        gradient.setColorAt(0, QColor(178, 255, 246))
        gradient.setColorAt(1, QColor(5, 44, 50))

        pen = QPen(QBrush(gradient), self._size // 10)
        pen.setCapStyle(Qt.RoundCap)
        painter.setPen(pen)
        painter.drawArc(drawing_rect, -self._angle * 16, 300 * 16)
    def paintEvent(self, event):
        painter = QPainter(self)
        painter.setPen(QPen(Qt.red, 4, Qt.SolidLine))

        # center point, start angle
        conicalGradient = QConicalGradient(QPoint(150, 100), 45.0)

        conicalGradient.setColorAt(0.0, Qt.red)
        conicalGradient.setColorAt(0.5, Qt.green)
        conicalGradient.setColorAt(1.0, Qt.yellow)
        painter.setBrush(QBrush(conicalGradient))

        painter.drawRect(10, 10, 200, 200)
Exemple #10
0
    def brushChanged(self):
        style = Qt.BrushStyle(
            self.brushStyleComboBox.itemData(
                self.brushStyleComboBox.currentIndex(), IdRole))

        if style == Qt.LinearGradientPattern:
            linearGradient = QLinearGradient(0, 0, 100, 100)
            linearGradient.setColorAt(0.0, Qt.white)
            linearGradient.setColorAt(0.2, Qt.green)
            linearGradient.setColorAt(1.0, Qt.black)
            self.renderArea.setBrush(QBrush(linearGradient))
        elif style == Qt.RadialGradientPattern:
            radialGradient = QRadialGradient(50, 50, 50, 70, 70)
            radialGradient.setColorAt(0.0, Qt.white)
            radialGradient.setColorAt(0.2, Qt.green)
            radialGradient.setColorAt(1.0, Qt.black)
            self.renderArea.setBrush(QBrush(radialGradient))
        elif style == Qt.ConicalGradientPattern:
            conicalGradient = QConicalGradient(50, 50, 150)
            conicalGradient.setColorAt(0.0, Qt.white)
            conicalGradient.setColorAt(0.2, Qt.green)
            conicalGradient.setColorAt(1.0, Qt.black)
            self.renderArea.setBrush(QBrush(conicalGradient))
        elif style == Qt.TexturePattern:
            self.renderArea.setBrush(QBrush(QPixmap(":/images/brick.png")))
        else:
            self.renderArea.setBrush(QBrush(Qt.green, style))
 def paintEvent(self, QPaintEvent):
     p = QPainter(self)
     r = self.rect()
     p.setPen(self.pen)
     if (self.sd.style == QGradient.LinearGradient):
         linearGradient = QLinearGradient(self.startPoint, self.endPoint)
         linearGradient.setColorAt(0.0, self.sd.startColor)
         linearGradient.setColorAt(1.0, self.sd.endColor)
         linearGradient.setSpread(self.sd.spread)
         p.setBrush(linearGradient)
     elif (self.sd.style == QGradient.RadialGradient):
         rr = math.sqrt(
             math.pow(self.endPoint.x() - self.startPoint.x(), 2) + math.pow(self.endPoint.y() - self.startPoint.y(),
                                                                             2))
         radialGradient = QRadialGradient(self.startPoint, rr, self.startPoint)
         radialGradient.setColorAt(0.0, self.sd.startColor)
         radialGradient.setColorAt(1.0, self.sd.endColor)
         radialGradient.setSpread(self.sd.spread)
         p.setBrush(radialGradient)
     elif (self.sd.style == QGradient.ConicalGradient):
         angle = math.atan2(self.endPoint.y() - self.startPoint.y(), self.endPoint.x() - self.startPoint.x())
         conicalGradient = QConicalGradient(self.startPoint, -(180 * angle) / math.pi)
         conicalGradient.setColorAt(0.0, self.sd.startColor)
         conicalGradient.setColorAt(1.0, self.sd.endColor)
         p.setBrush(conicalGradient)
         p.drawRect(r)
Exemple #12
0
    def draw_filled_polygon(self, outline_pen_with=0):
        if not self.scale_polygon_colors == None:
            painter_filled_polygon = QPainter(self)
            painter_filled_polygon.setRenderHint(QPainter.Antialiasing)
            # Koordinatenursprung in die Mitte der Flaeche legen
            painter_filled_polygon.translate(self.width() / 2,
                                             self.height() / 2)

            painter_filled_polygon.setPen(Qt.NoPen)

            self.pen.setWidth(outline_pen_with)
            if outline_pen_with > 0:
                painter_filled_polygon.setPen(self.pen)

            colored_scale_polygon = self.create_polygon_pie(
                ((self.widget_diameter / 2) - (self.pen.width() / 2)) *
                self.gauge_color_outer_radius_factor,
                (((self.widget_diameter / 2) - (self.pen.width() / 2)) *
                 self.gauge_color_inner_radius_factor),
                self.scale_angle_start_value, self.scale_angle_size)

            gauge_rect = QRect(
                QPoint(0, 0),
                QSize(self.widget_diameter / 2 - 1, self.widget_diameter - 1))
            grad = QConicalGradient(
                QPointF(0, 0), -self.scale_angle_size -
                self.scale_angle_start_value + self.angle_offset - 1)

            # todo definition scale color as array here
            for eachcolor in self.scale_polygon_colors:
                grad.setColorAt(eachcolor[0], eachcolor[1])
            # grad.setColorAt(.00, Qt.red)
            # grad.setColorAt(.1, Qt.yellow)
            # grad.setColorAt(.15, Qt.green)
            # grad.setColorAt(1, Qt.transparent)
            painter_filled_polygon.setBrush(grad)
            # self.brush = QBrush(QColor(255, 0, 255, 255))
            # painter_filled_polygon.setBrush(self.brush)
            painter_filled_polygon.drawPolygon(colored_scale_polygon)
Exemple #13
0
    def __init__(self,
                 title,
                 unit,
                 min_value,
                 max_value,
                 init_value=None,
                 parent=None):
        QWidget.__init__(self, parent)
        self.min_value = min_value
        self.max_value = max_value
        initv = 0.0
        if init_value:
            if init_value < 0:
                initv = 0
            elif init_value > max_value:
                initv = max_value
            else:
                initv = init_value
        self.speed = initv
        self.displayPowerPath = True
        self.title = title
        self.power = 100.0 * (self.speed - self.min_value) / (self.max_value -
                                                              self.min_value)
        self.powerGradient = QConicalGradient(0, 0, 180)
        self.powerGradient.setColorAt(0, Qt.red)
        self.powerGradient.setColorAt(0.375, Qt.yellow)
        self.powerGradient.setColorAt(0.75, Qt.green)
        self.unitTextColor = QColor(Qt.gray)
        self.speedTextColor = QColor(Qt.black)
        self.powerPathColor = QColor(Qt.gray)
        self.unit = unit
        self.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Ignored)

        self.anim_reset = QPropertyAnimation(self, b"value")
        self.anim_reset.setDuration(500)
        self.anim_reset.setEndValue(0)
Exemple #14
0
 def rebuildDataBrushIfNeeded(self):
     if not self.m_rebuildBrush or not self.m_gradientData or self.m_barStyle == self.BarStyle.LINE:
         return
     self.m_rebuildBrush = False
     p = self.palette()
     if self.m_barStyle == self.BarStyle.EXPAND:
         dataBrush = QRadialGradient(0.5, 0.5, 0.5, 0.5, 0.5)
         dataBrush.setCoordinateMode(QGradient.StretchToDeviceMode)
         for i in range(0, len(self.m_gradientData)):
             dataBrush.setColorAt(self.m_gradientData[i][0], self.m_gradientData[i][1])
         p.setBrush(QPalette.Highlight, dataBrush)
     else:
         dataBrush = QConicalGradient(QPointF(0.5, 0.5), self.m_nullPosition)
         dataBrush.setCoordinateMode(QGradient.StretchToDeviceMode)
         for i in range(0, len(self.m_gradientData)):
             dataBrush.setColorAt(1 - self.m_gradientData[i][0], self.m_gradientData[i][1])
         p.setBrush(QPalette.Highlight, dataBrush)
     self.setPalette(p)
Exemple #15
0
 def paintEvent(self, event):
     painter = QPainter(self)
     pen = QPen()
     pen.setStyle(Qt.NoPen)
     painter.setPen(pen)
     W = self.width()
     H = self.height()
     rect = QRect(W / 4, H / 4, W / 2, H / 2)
     coniGrad = QConicalGradient(W / 2, H / 2, 0)
     coniGrad.setColorAt(0, Qt.yellow)
     coniGrad.setColorAt(0.5, Qt.blue)
     coniGrad.setColorAt(1, Qt.green)
     painter.setBrush(coniGrad)
     painter.drawRect(rect)
Exemple #16
0
    def toGradient(cls, data):
        """把字典转成渐变
        :param cls:
        :param data:        字典数据
        """
        gtype = data.get('type', -1)
        if gtype == QGradient.LinearGradient:
            gradient = QLinearGradient()
        elif gtype == QGradient.RadialGradient:
            gradient = QRadialGradient()
        elif gtype == QGradient.ConicalGradient:
            gradient = QConicalGradient()
        else:
            gradient = QLinearGradient()
        gradient.setSpread(data.get('spread', QGradient.PadSpread))
        gradient.setStart(data.get('start', QPointF(0, 0)))
        gradient.setFinalStop(data.get('finalStop', QPointF(1, 1)))
        stops = data.get('stops', None)
        if stops:
            gradient.setStops(stops)

        return gradient
Exemple #17
0
    def paintEvent(self, event):
        painter = QPainter(self)
        event.accept()

        painter.save()
        painter.setRenderHint(QPainter.Antialiasing, True)

        if self.fLabel:
            if self.fCustomPaintMode == self.CUSTOM_PAINT_MODE_NULL:
                painter.setPen(self.fLabelGradientColor2)
                painter.setBrush(self.fLabelGradient)
                painter.drawRect(self.fLabelGradientRect)

            painter.setFont(self.fLabelFont)
            painter.setPen(
                self.fLabelGradientColorT[0 if self.isEnabled() else 1])
            painter.drawText(self.fLabelPos, self.fLabel)

        if self.isEnabled():
            normValue = float(self.fRealValue -
                              self.fMinimum) / float(self.fMaximum -
                                                     self.fMinimum)
            curLayer = int((self.fImageLayersCount - 1) * normValue)

            if self.fImageOrientation == self.HORIZONTAL:
                xpos = self.fImageBaseSize * curLayer
                ypos = 0.0
            else:
                xpos = 0.0
                ypos = self.fImageBaseSize * curLayer

            source = QRectF(xpos, ypos, self.fImageBaseSize,
                            self.fImageBaseSize)

            if isinstance(self.fImage, QPixmap):
                target = QRectF(0.0, 0.0, self.fImageBaseSize,
                                self.fImageBaseSize)
                painter.drawPixmap(target, self.fImage, source)
            else:
                self.fImage.renderer().render(painter, source)

            # Custom knobs (Dry/Wet and Volume)
            if self.fCustomPaintMode in (self.CUSTOM_PAINT_MODE_CARLA_WET,
                                         self.CUSTOM_PAINT_MODE_CARLA_VOL):
                # knob color
                colorGreen = QColor(0x5D, 0xE7,
                                    0x3D).lighter(100 + self.fHoverStep * 6)
                colorBlue = QColor(0x3E, 0xB8,
                                   0xBE).lighter(100 + self.fHoverStep * 6)

                # draw small circle
                ballRect = QRectF(8.0, 8.0, 15.0, 15.0)
                ballPath = QPainterPath()
                ballPath.addEllipse(ballRect)
                #painter.drawRect(ballRect)
                tmpValue = (0.375 + 0.75 * normValue)
                ballValue = tmpValue - floor(tmpValue)
                ballPoint = ballPath.pointAtPercent(ballValue)

                # draw arc
                startAngle = 218 * 16
                spanAngle = -255 * 16 * normValue

                if self.fCustomPaintMode == self.CUSTOM_PAINT_MODE_CARLA_WET:
                    painter.setBrush(colorBlue)
                    painter.setPen(QPen(colorBlue, 0))
                    painter.drawEllipse(
                        QRectF(ballPoint.x(), ballPoint.y(), 2.2, 2.2))

                    gradient = QConicalGradient(15.5, 15.5, -45)
                    gradient.setColorAt(0.0, colorBlue)
                    gradient.setColorAt(0.125, colorBlue)
                    gradient.setColorAt(0.625, colorGreen)
                    gradient.setColorAt(0.75, colorGreen)
                    gradient.setColorAt(0.76, colorGreen)
                    gradient.setColorAt(1.0, colorGreen)
                    painter.setBrush(gradient)
                    painter.setPen(QPen(gradient, 3))

                else:
                    painter.setBrush(colorBlue)
                    painter.setPen(QPen(colorBlue, 0))
                    painter.drawEllipse(
                        QRectF(ballPoint.x(), ballPoint.y(), 2.2, 2.2))

                    painter.setBrush(colorBlue)
                    painter.setPen(QPen(colorBlue, 3))

                painter.drawArc(4.0, 4.0, 26.0, 26.0, startAngle, spanAngle)

            # Custom knobs (L and R)
            elif self.fCustomPaintMode in (self.CUSTOM_PAINT_MODE_CARLA_L,
                                           self.CUSTOM_PAINT_MODE_CARLA_R):
                # knob color
                color = QColor(0xAD, 0xD5,
                               0x48).lighter(100 + self.fHoverStep * 6)

                # draw small circle
                ballRect = QRectF(7.0, 8.0, 11.0, 12.0)
                ballPath = QPainterPath()
                ballPath.addEllipse(ballRect)
                #painter.drawRect(ballRect)
                tmpValue = (0.375 + 0.75 * normValue)
                ballValue = tmpValue - floor(tmpValue)
                ballPoint = ballPath.pointAtPercent(ballValue)

                painter.setBrush(color)
                painter.setPen(QPen(color, 0))
                painter.drawEllipse(
                    QRectF(ballPoint.x(), ballPoint.y(), 2.0, 2.0))

                # draw arc
                if self.fCustomPaintMode == self.CUSTOM_PAINT_MODE_CARLA_L:
                    startAngle = 218 * 16
                    spanAngle = -255 * 16 * normValue
                else:
                    startAngle = 322.0 * 16
                    spanAngle = 255.0 * 16 * (1.0 - normValue)

                painter.setPen(QPen(color, 2.5))
                painter.drawArc(3.5, 3.5, 22.0, 22.0, startAngle, spanAngle)

            # Custom knobs (Color)
            elif self.fCustomPaintMode == self.CUSTOM_PAINT_MODE_COLOR:
                # knob color
                color = self.fCustomPaintColor.lighter(100 +
                                                       self.fHoverStep * 6)

                # draw small circle
                ballRect = QRectF(8.0, 8.0, 15.0, 15.0)
                ballPath = QPainterPath()
                ballPath.addEllipse(ballRect)
                tmpValue = (0.375 + 0.75 * normValue)
                ballValue = tmpValue - floor(tmpValue)
                ballPoint = ballPath.pointAtPercent(ballValue)

                # draw arc
                startAngle = 218 * 16
                spanAngle = -255 * 16 * normValue

                painter.setBrush(color)
                painter.setPen(QPen(color, 0))
                painter.drawEllipse(
                    QRectF(ballPoint.x(), ballPoint.y(), 2.2, 2.2))

                painter.setBrush(color)
                painter.setPen(QPen(color, 3))
                painter.drawArc(4.0, 4.8, 26.0, 26.0, startAngle, spanAngle)

            # Custom knobs (Zita)
            elif self.fCustomPaintMode == self.CUSTOM_PAINT_MODE_ZITA:
                a = normValue * pi * 1.5 - 2.35
                r = 10.0
                x = 10.5
                y = 10.5
                x += r * sin(a)
                y -= r * cos(a)
                painter.setBrush(Qt.black)
                painter.setPen(QPen(Qt.black, 2))
                painter.drawLine(QPointF(11.0, 11.0), QPointF(x, y))

            # Custom knobs
            else:
                painter.restore()
                return

            if self.HOVER_MIN < self.fHoverStep < self.HOVER_MAX:
                self.fHoverStep += 1 if self.fIsHovered else -1
                QTimer.singleShot(20, self.update)

        else:  # isEnabled()
            target = QRectF(0.0, 0.0, self.fImageBaseSize, self.fImageBaseSize)
            if isinstance(self.fImage, QPixmap):
                painter.drawPixmap(target, self.fImage, target)
            else:
                self.fImage.renderer().render(painter, target)

        painter.restore()
Exemple #18
0
    def paintEvent(self, event):
        painter = QPainter(self)
        event.accept()

        painter.save()
        painter.setRenderHint(QPainter.Antialiasing, True)

        if self.fLabel:
            if self.fCustomPaintMode == self.CUSTOM_PAINT_MODE_NULL:
                painter.setPen(self.fLabelGradientColor2)
                painter.setBrush(self.fLabelGradient)
                painter.drawRect(self.fLabelGradientRect)

            painter.setFont(self.fLabelFont)
            painter.setPen(self.fLabelGradientColorT[0 if self.isEnabled() else 1])
            painter.drawText(self.fLabelPos, self.fLabel)

        if self.isEnabled():
            normValue = float(self.fRealValue - self.fMinimum) / float(self.fMaximum - self.fMinimum)
            target    = QRectF(0.0, 0.0, self.fPixmapBaseSize, self.fPixmapBaseSize)

            curLayer = int((self.fPixmapLayersCount - 1) * normValue)

            if self.fPixmapOrientation == self.HORIZONTAL:
                xpos = self.fPixmapBaseSize * curLayer
                ypos = 0.0
            else:
                xpos = 0.0
                ypos = self.fPixmapBaseSize * curLayer

            source = QRectF(xpos, ypos, self.fPixmapBaseSize, self.fPixmapBaseSize)
            painter.drawPixmap(target, self.fPixmap, source)

            # Custom knobs (Dry/Wet and Volume)
            if self.fCustomPaintMode in (self.CUSTOM_PAINT_MODE_CARLA_WET, self.CUSTOM_PAINT_MODE_CARLA_VOL):
                # knob color
                colorGreen = QColor(0x5D, 0xE7, 0x3D).lighter(100 + self.fHoverStep*6)
                colorBlue  = QColor(0x3E, 0xB8, 0xBE).lighter(100 + self.fHoverStep*6)

                # draw small circle
                ballRect = QRectF(8.0, 8.0, 15.0, 15.0)
                ballPath = QPainterPath()
                ballPath.addEllipse(ballRect)
                #painter.drawRect(ballRect)
                tmpValue  = (0.375 + 0.75*normValue)
                ballValue = tmpValue - floor(tmpValue)
                ballPoint = ballPath.pointAtPercent(ballValue)

                # draw arc
                startAngle = 216*16
                spanAngle  = -252*16*normValue

                if self.fCustomPaintMode == self.CUSTOM_PAINT_MODE_CARLA_WET:
                    painter.setBrush(colorBlue)
                    painter.setPen(QPen(colorBlue, 0))
                    painter.drawEllipse(QRectF(ballPoint.x(), ballPoint.y(), 2.2, 2.2))

                    gradient = QConicalGradient(15.5, 15.5, -45)
                    gradient.setColorAt(0.0,   colorBlue)
                    gradient.setColorAt(0.125, colorBlue)
                    gradient.setColorAt(0.625, colorGreen)
                    gradient.setColorAt(0.75,  colorGreen)
                    gradient.setColorAt(0.76,  colorGreen)
                    gradient.setColorAt(1.0,   colorGreen)
                    painter.setBrush(gradient)
                    painter.setPen(QPen(gradient, 3))

                else:
                    painter.setBrush(colorBlue)
                    painter.setPen(QPen(colorBlue, 0))
                    painter.drawEllipse(QRectF(ballPoint.x(), ballPoint.y(), 2.2, 2.2))

                    painter.setBrush(colorBlue)
                    painter.setPen(QPen(colorBlue, 3))

                painter.drawArc(4.0, 4.0, 26.0, 26.0, startAngle, spanAngle)

            # Custom knobs (L and R)
            elif self.fCustomPaintMode in (self.CUSTOM_PAINT_MODE_CARLA_L, self.CUSTOM_PAINT_MODE_CARLA_R):
                # knob color
                color = QColor(0xAD, 0xD5, 0x48).lighter(100 + self.fHoverStep*6)

                # draw small circle
                ballRect = QRectF(7.0, 8.0, 11.0, 12.0)
                ballPath = QPainterPath()
                ballPath.addEllipse(ballRect)
                #painter.drawRect(ballRect)
                tmpValue  = (0.375 + 0.75*normValue)
                ballValue = tmpValue - floor(tmpValue)
                ballPoint = ballPath.pointAtPercent(ballValue)

                painter.setBrush(color)
                painter.setPen(QPen(color, 0))
                painter.drawEllipse(QRectF(ballPoint.x(), ballPoint.y(), 2.0, 2.0))

                # draw arc
                if self.fCustomPaintMode == self.CUSTOM_PAINT_MODE_CARLA_L:
                    startAngle = 216*16
                    spanAngle  = -252.0*16*normValue
                else:
                    startAngle = 324.0*16
                    spanAngle  = 252.0*16*(1.0-normValue)

                painter.setPen(QPen(color, 2))
                painter.drawArc(3.5, 4.5, 22.0, 22.0, startAngle, spanAngle)

            # Custom knobs (Color)
            elif self.fCustomPaintMode == self.CUSTOM_PAINT_MODE_COLOR:
                # knob color
                color = self.fCustomPaintColor.lighter(100 + self.fHoverStep*6)

                # draw small circle
                ballRect = QRectF(8.0, 8.0, 15.0, 15.0)
                ballPath = QPainterPath()
                ballPath.addEllipse(ballRect)
                tmpValue  = (0.375 + 0.75*normValue)
                ballValue = tmpValue - floor(tmpValue)
                ballPoint = ballPath.pointAtPercent(ballValue)

                # draw arc
                startAngle = 216*16
                spanAngle  = -252*16*normValue

                painter.setBrush(color)
                painter.setPen(QPen(color, 0))
                painter.drawEllipse(QRectF(ballPoint.x(), ballPoint.y(), 2.2, 2.2))

                painter.setBrush(color)
                painter.setPen(QPen(color, 3))
                painter.drawArc(4.0, 4.0, 26.0, 26.0, startAngle, spanAngle)

            # Custom knobs (Zita)
            elif self.fCustomPaintMode == self.CUSTOM_PAINT_MODE_ZITA:
                a = normValue * pi * 1.5 - 2.35
                r = 10.0
                x = 10.5
                y = 10.5
                x += r * sin(a)
                y -= r * cos(a)
                painter.setBrush(Qt.black)
                painter.setPen(QPen(Qt.black, 2))
                painter.drawLine(QPointF(11.0, 11.0), QPointF(x, y))

            # Custom knobs
            else:
                painter.restore()
                return

            if self.HOVER_MIN < self.fHoverStep < self.HOVER_MAX:
                self.fHoverStep += 1 if self.fIsHovered else -1
                QTimer.singleShot(20, self.update)

        else: # isEnabled()
            target = QRectF(0.0, 0.0, self.fPixmapBaseSize, self.fPixmapBaseSize)
            painter.drawPixmap(target, self.fPixmap, target)

        painter.restore()
Exemple #19
0
    def drawWidget(self, painter):
        # Поиск лучшего местоположения для томата

        size = self.size()
        x, y = size.width(), size.height()

        sec = self.current_time % 60
        min = self.current_time // 60

        angle = self.current_time / self.default_time
        if sec and min:
            rend_text = "{}:{}".format(min, sec)
        elif sec:
            rend_text = "{}".format(sec)
        elif min:
            rend_text = "{}:0".format(min)
        else:
            rend_text = "0"
            self.is_active = 0
            self.current_time = self.default_time
            self.alarmSound.play()
        if x < y - 70:

            center = (x / 2, (y - 20) / 2 + 20)
            notcenter = x / 2 - 20
        else:
            center = (x / 2, y / 2 + 20)
            notcenter = y / 2 - 60

        gradient = QConicalGradient(QPointF(*center), 0)
        gradient.setAngle(90)

        gradient.setColorAt(0, QColor("911e42"))
        if angle != 1 or not self.is_active:
            gradient.setColorAt(1, QColor("#4a75c1"))

        if self.is_active:
            gradient.setColorAt(angle, QColor("#9c7130"))

        brush = QBrush(gradient)
        painter.setBrush(brush)

        self.centerx = center[0]
        self.highy = center[1] - notcenter

        self.font = QFont("Helvetica [Cronyx]", int(notcenter / 6))
        painter.setFont(self.font)
        painter.drawEllipse(QPointF(*center), notcenter, notcenter)

        pen = QPen(QColor("#111100"))
        painter.setPen(pen)

        painter.drawText(*center, rend_text)

        gradient = QConicalGradient(QPointF(x / 4, self.highy / 2), 0)
        gradient.setAngle(90)
        gradient.setColorAt(0, QColor("#faff53"))
        gradient.setColorAt(0.125, QColor("#23c900"))
        gradient.setColorAt(0.25, QColor("#faff53"))
        gradient.setColorAt(0.375, QColor("#23c900"))
        gradient.setColorAt(0.5, QColor("#faff53"))
        gradient.setColorAt(0.625, QColor("#23c900"))
        gradient.setColorAt(0.75, QColor("#faff53"))
        gradient.setColorAt(0.875, QColor("#23c900"))
        gradient.setColorAt(1, QColor("#faff53"))
        painter.setBrush(gradient)
        painter.drawRect(
            QRectF(QPoint(0, 0), QPoint(self.centerx, self.highy - 1)))

        gradient = QConicalGradient(QPointF(x * 3 / 4, self.highy / 2), 0)
        gradient.setColorAt(0, QColor("#fff0f0"))
        gradient.setColorAt(0.1, QColor("#f4432a"))
        gradient.setColorAt(0.4, QColor("#f4432a"))
        gradient.setColorAt(0.5, QColor("#fff0f0"))
        gradient.setColorAt(0.6, QColor("#f4432a"))
        gradient.setColorAt(0.9, QColor("#f4432a"))
        gradient.setColorAt(1, QColor("#fff0f0"))
        painter.setBrush(gradient)
        painter.drawRect(
            QRectF(QPoint(x, 0), QPoint(self.centerx, self.highy - 1)))
            def paintEvent(self, objQPaintEvent):
                p = QPainter()
                p.begin(self)

                pen = QPen(Qt.black, 2, Qt.SolidLine)
                p.setPen(pen)
                p.drawLine(20, 15, 150, 15)
                pen.setStyle(Qt.DashLine)
                p.setPen(pen)
                p.drawLine(20, 35, 150, 35)
                pen.setStyle(Qt.DotLine)
                p.setPen(pen)
                p.drawLine(20, 55, 150, 55)
                pen.setStyle(Qt.DashDotLine)
                p.setPen(pen)
                p.drawLine(20, 75, 150, 75)
                pen.setStyle(Qt.DashDotDotLine)
                p.setPen(pen)
                p.drawLine(20, 95, 150, 95)
                pen.setStyle(Qt.CustomDashLine)
                pen.setDashPattern([1, 4, 5, 4])
                p.setPen(pen)
                p.drawLine(20, 115, 150, 115)

                pen.setWidth(1)
                pen.setStyle(Qt.SolidLine)
                p.setPen(pen)
                brush = QBrush(Qt.SolidPattern)
                p.setBrush(brush)
                p.drawRect(180, 10, 40, 30)
                brush = QBrush(Qt.Dense5Pattern)
                p.setBrush(brush)
                p.drawRect(240, 10, 40, 30)
                brush = QBrush(Qt.Dense7Pattern)
                p.setBrush(brush)
                p.drawRect(300, 10, 40, 30)

                brush = QBrush(Qt.green, Qt.HorPattern)
                p.setBrush(brush)
                p.drawRect(180, 50, 40, 30)
                brush = QBrush(Qt.green, Qt.VerPattern)
                p.setBrush(brush)
                p.drawRect(240, 50, 40, 30)
                brush = QBrush(Qt.green, Qt.Dense6Pattern)
                brush = QBrush(Qt.green, Qt.CrossPattern)
                p.setBrush(brush)
                p.drawRect(300, 50, 40, 30)

                brush = QBrush(Qt.blue, Qt.BDiagPattern)
                p.setBrush(brush)
                p.drawRect(180, 90, 40, 30)
                brush = QBrush(Qt.blue, Qt.FDiagPattern)
                p.setBrush(brush)
                p.drawRect(240, 90, 40, 30)
                brush = QBrush(Qt.blue, Qt.DiagCrossPattern)
                p.setBrush(brush)
                p.drawRect(300, 90, 40, 30)

                g = QLinearGradient(180, 130, 220, 160)
                g.setColorAt(0, Qt.red)
                g.setColorAt(1, Qt.blue)
                brush = QBrush(g)
                p.setBrush(brush)
                p.drawRect(180, 130, 40, 30)
                g = QRadialGradient(260, 145, 20)
                g.setColorAt(0, Qt.red)
                g.setColorAt(0.5, Qt.yellow)
                g.setColorAt(1, Qt.blue)
                p.setBrush(g)
                p.drawRect(240, 130, 40, 30)
                g = QConicalGradient(320, 145, 0)
                g.setColorAt(0, Qt.red)
                g.setColorAt(0.4, Qt.yellow)
                g.setColorAt(0.8, Qt.blue)
                g.setColorAt(1, Qt.red)
                p.setBrush(g)
                p.drawRect(300, 130, 40, 30)

                brush = QBrush()
                brush.setTexture(QPixmap(":appres.img/texture.jpg"))
                p.setBrush(brush)
                pen.setColor(Qt.transparent)
                p.setPen(pen)
                p.drawRect(15, 130, 135, 35)

                p.end()
Exemple #21
0
class Speedometer(QWidget):
    """QWidget of a Speedometer
    Use `setSpeed(speed)` method to update display.
    Use `reset()` to reset back to 0 with an animation effect.
    
    To create animation of speed changing, use QPropertyAnimation on 'value':
        anim = QPropertyAnimation(Speedometer, b"value")
        anim.setStartValue(x)
        anim.setEndValue(y)
        anim.setDuration(ms)
        anim.start()
    """
    def __init__(self,
                 title,
                 unit,
                 min_value,
                 max_value,
                 init_value=None,
                 parent=None):
        QWidget.__init__(self, parent)
        self.min_value = min_value
        self.max_value = max_value
        initv = 0.0
        if init_value:
            if init_value < 0:
                initv = 0
            elif init_value > max_value:
                initv = max_value
            else:
                initv = init_value
        self.speed = initv
        self.displayPowerPath = True
        self.title = title
        self.power = 100.0 * (self.speed - self.min_value) / (self.max_value -
                                                              self.min_value)
        self.powerGradient = QConicalGradient(0, 0, 180)
        self.powerGradient.setColorAt(0, Qt.red)
        self.powerGradient.setColorAt(0.375, Qt.yellow)
        self.powerGradient.setColorAt(0.75, Qt.green)
        self.unitTextColor = QColor(Qt.gray)
        self.speedTextColor = QColor(Qt.black)
        self.powerPathColor = QColor(Qt.gray)
        self.unit = unit
        self.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Ignored)

        self.anim_reset = QPropertyAnimation(self, b"value")
        self.anim_reset.setDuration(500)
        self.anim_reset.setEndValue(0)

    @pyqtSlot(float)
    def setSpeed(self, speed):
        self.speed = speed
        self.power = 100.0 * (self.speed - self.min_value) / (self.max_value -
                                                              self.min_value)
        self.update()

    def setUnit(self, unit):
        self.unit = unit

    def setPowerGradient(self, gradient):
        self.powerGradient = gradient

    def setDisplayPowerPath(self, displayPowerPath):
        self.displayPowerPath = displayPowerPath

    def setUnitTextColor(self, color):
        self.unitTextColor = color

    def setSpeedTextColor(self, color):
        self.speedTextColor = color

    def setPowerPathColor(self, color):
        self.powerPathColor = color

    def sizeHint(self):
        return QSize(100, 100)

    def reset(self):
        self.anim_reset.setStartValue(self.speed)
        self.anim_reset.start()

    def paintEvent(self, evt):
        x1 = QPoint(0, -70)
        x2 = QPoint(0, -90)
        x3 = QPoint(-90, 0)
        x4 = QPoint(-70, 0)
        extRect = QRectF(-90, -90, 180, 180)
        intRect = QRectF(-70, -70, 140, 140)
        midRect = QRectF(-44, -80, 160, 160)
        unitRect = QRectF(-50, 60, 110, 50)

        speedInt = self.speed
        #speedDec = (self.speed * 10.0) - (speedInt * 10)
        s_SpeedInt = speedInt.__str__()[0:4]

        powerAngle = self.power * 270.0 / 100.0

        dummyPath = QPainterPath()
        dummyPath.moveTo(x1)
        dummyPath.arcMoveTo(intRect, 90 - powerAngle)
        powerPath = QPainterPath()
        powerPath.moveTo(x1)
        powerPath.lineTo(x2)
        powerPath.arcTo(extRect, 90, -1 * powerAngle)
        powerPath.lineTo(dummyPath.currentPosition())
        powerPath.arcTo(intRect, 90 - powerAngle, powerAngle)

        painter = QPainter(self)
        painter.setRenderHint(QPainter.Antialiasing)
        painter.translate(self.width() / 2, self.height() / 2)
        side = min(self.width(), self.height())
        painter.scale(side / 200.0, side / 200.0)

        painter.save()
        painter.rotate(-135)

        if self.displayPowerPath:
            externalPath = QPainterPath()
            externalPath.moveTo(x1)
            externalPath.lineTo(x2)
            externalPath.arcTo(extRect, 90, -270)
            externalPath.lineTo(x4)
            externalPath.arcTo(intRect, 180, 270)

            painter.setPen(self.powerPathColor)
            painter.drawPath(externalPath)

        painter.setBrush(self.powerGradient)
        painter.setPen(Qt.NoPen)
        painter.drawPath(powerPath)
        painter.restore()
        painter.save()

        painter.translate(QPointF(0, -50))

        painter.setPen(self.unitTextColor)
        fontFamily = self.font().family()
        unitFont = QFont(fontFamily, 9)
        painter.setFont(unitFont)
        painter.drawText(unitRect, Qt.AlignCenter, "{}".format(self.unit))

        painter.restore()

        painter.setPen(self.unitTextColor)
        fontFamily = self.font().family()
        unitFont = QFont(fontFamily, 12)
        painter.setFont(unitFont)
        painter.drawText(unitRect, Qt.AlignCenter, "{}".format(self.title))

        speedColor = QColor(0, 0, 0)
        speedFont = QFont(fontFamily, 30)
        fm1 = QFontMetrics(speedFont)
        speedWidth = fm1.width(s_SpeedInt)

        #speedDecFont = QFont(fontFamily, 23)
        #fm2 = QFontMetrics(speedDecFont)
        #speedDecWidth = fm2.width(s_SpeedDec)

        leftPos = -1 * speedWidth + 40
        leftDecPos = leftPos + speedWidth
        topPos = 10
        topDecPos = 10
        painter.setPen(self.speedTextColor)
        painter.setFont(speedFont)
        painter.drawText(leftPos, topPos, s_SpeedInt)

    value = pyqtProperty(float, fset=setSpeed)
Exemple #22
0
    def paintEvent(self, event):
        self._center = np.array((self.width() / 2.0, self.height() / 2.0))
        self._radius = min(self.width(),
                           self.height()) * self._args.wheel_ratio / 2

        painter = QPainter()
        painter.begin(self)
        painter.setRenderHint(QPainter.Antialiasing, True)
        painter.setRenderHint(QPainter.TextAntialiasing, True)
        painter.setRenderHint(QPainter.SmoothPixmapTransform, True)

        # color wheel. hue.
        wheel_box = get_outer_box(self._center, self._radius)
        painter.setPen(
            QPen(QColor(*self._args.wheel_ed_color), self._args.wheel_ed_wid))
        cgrad = QConicalGradient(*self._center, 0)
        cgrad.setColorAt(0.00000, QColor(255, 0, 0))
        cgrad.setColorAt(0.16667, QColor(255, 0, 255))
        cgrad.setColorAt(0.33333, QColor(0, 0, 255))
        cgrad.setColorAt(0.50000, QColor(0, 255, 255))
        cgrad.setColorAt(0.66667, QColor(0, 255, 0))
        cgrad.setColorAt(0.83333, QColor(255, 255, 0))
        cgrad.setColorAt(1.00000, QColor(255, 0, 0))
        painter.setBrush(cgrad)
        painter.drawEllipse(*wheel_box)

        # color wheel. saturation.
        rgrad = QRadialGradient(*self._center, self._radius)
        rgrad.setColorAt(0.0, Qt.white)
        rgrad.setColorAt(1.0, Qt.transparent)
        painter.setBrush(rgrad)
        painter.drawEllipse(*wheel_box)

        # bars.
        bar_hsv = self._args.sys_color_set[self._args.sys_activated_idx].hsv
        bar_v = bar_hsv[2]
        bar_rgb = Color.hsv2rgb((bar_hsv[0], bar_hsv[1], 1.0))
        self._v_tag_radius = min(self.width(),
                                 self.height()) * self._args.v_tag_radius / 2

        re_wid = self.width() * (
            1 - self._args.wheel_ratio) / 2 * self._args.volum_ratio
        re_wid = self._v_tag_radius * 3 if self._v_tag_radius * 3 < re_wid else re_wid

        bar_1_center = ((self.width() - self._radius * 2) / 4,
                        self.height() / 2)
        self._bar_1_box = (bar_1_center[0] - re_wid / 2, bar_1_center[1] -
                           self.height() * self._args.volum_ratio / 2, re_wid,
                           self.height() * self._args.volum_ratio)
        painter.setPen(
            QPen(QColor(*self._args.wheel_ed_color), self._args.wheel_ed_wid))
        lgrad = QLinearGradient(self._bar_1_box[0], self._bar_1_box[1],
                                self._bar_1_box[0], self._bar_1_box[3])
        lgrad.setColorAt(1.0, Qt.white)
        lgrad.setColorAt(0.0, Qt.black)
        painter.setBrush(lgrad)
        painter.drawRect(*self._bar_1_box)

        self._cir_1_center = (bar_1_center[0],
                              self._bar_1_box[1] + self._bar_1_box[3] * bar_v)
        cir_1_box = get_outer_box(self._cir_1_center, self._v_tag_radius)
        painter.setPen(
            QPen(QColor(*self._args.positive_color), self._args.positive_wid))
        painter.setBrush(QBrush(Qt.NoBrush))
        painter.drawEllipse(*cir_1_box)

        bar_2_center = (self.width() - (self.width() - self._radius * 2) / 4,
                        self.height() / 2)
        self._bar_2_box = (bar_2_center[0] - re_wid / 2, bar_2_center[1] -
                           self.height() * self._args.volum_ratio / 2, re_wid,
                           self.height() * self._args.volum_ratio)
        painter.setPen(
            QPen(QColor(*self._args.wheel_ed_color), self._args.wheel_ed_wid))
        lgrad = QLinearGradient(self._bar_2_box[0], self._bar_2_box[1],
                                self._bar_2_box[0], self._bar_2_box[3])
        lgrad.setColorAt(1.0, QColor(*bar_rgb))
        lgrad.setColorAt(0.0, Qt.black)
        painter.setBrush(lgrad)
        painter.drawRect(*self._bar_2_box)

        self._cir_2_center = (bar_2_center[0],
                              self._bar_2_box[1] + self._bar_2_box[3] * bar_v)
        cir_2_box = get_outer_box(self._cir_2_center, self._v_tag_radius)
        painter.setPen(
            QPen(QColor(*self._args.positive_color), self._args.positive_wid))
        painter.setBrush(QBrush(Qt.NoBrush))
        painter.drawEllipse(*cir_2_box)

        # color set tags.
        self._tag_center = [None] * 5
        self._tag_radius = min(self.width(),
                               self.height()) * self._args.s_tag_radius / 2

        self._idx_seq = list(range(5))
        self._idx_seq = self._idx_seq[
            self._args.sys_activated_idx +
            1:] + self._idx_seq[:self._args.sys_activated_idx + 1]

        # lines.
        for idx in self._idx_seq:
            color_center = np.array([
                self._args.sys_color_set[idx].s * self._radius, 0
            ]) + self._center
            color_center = rotate_point_center(self._center, color_center,
                                               self._args.sys_color_set[idx].h)
            self._tag_center[idx] = color_center

            if idx == self._args.sys_activated_idx:
                painter.setPen(
                    QPen(QColor(*self._args.positive_color),
                         self._args.positive_wid))

            else:
                painter.setPen(
                    QPen(QColor(*self._args.negative_color),
                         self._args.negative_wid))

            painter.drawLine(QPoint(*self._center), QPoint(*color_center))

        # dot.
        dot_box = get_outer_box(self._center, self._args.positive_wid)
        painter.setPen(QPen(Qt.NoPen))
        painter.setBrush(QBrush(QColor(*self._args.positive_color)))
        painter.drawEllipse(*dot_box)

        # circles.
        for idx in self._idx_seq:
            color_box = get_outer_box(self._tag_center[idx], self._tag_radius)

            if idx == self._args.sys_activated_idx:
                painter.setPen(
                    QPen(QColor(*self._args.positive_color),
                         self._args.positive_wid))

            else:
                painter.setPen(
                    QPen(QColor(*self._args.negative_color),
                         self._args.negative_wid))

            painter.setBrush(QColor(*self._args.sys_color_set[idx].rgb))
            painter.drawEllipse(*color_box)

        painter.end()
Exemple #23
0
class Dial(QWidget):
    def __init__(self,
                 title,
                 unit,
                 tmin,
                 tmax,
                 green,
                 yellow,
                 red,
                 pc,
                 parent=None):
        QWidget.__init__(self, parent)
        self.min = tmin
        self.max = tmax
        self.speed = tmin
        self.pc = pc
        self.displayPowerPath = True
        self.title = title
        self.power = 100.0 * (self.speed - self.min) / (self.max - self.min)

        self.powerGradient = QConicalGradient(0, 0, 180)
        self.powerGradient.setColorAt(red, Qt.red)
        self.powerGradient.setColorAt(yellow, Qt.yellow)
        self.powerGradient.setColorAt(green, Qt.green)
        self.unitTextColor = QColor(Qt.black)
        self.speedTextColor = QColor(Qt.black)
        self.powerPathColor = QColor(Qt.gray)
        self.unit = unit

    def setSpeed(self, speed):
        self.speed = speed
        self.power = 100.0 * (self.speed - self.min) / (self.max - self.min)
        self.update()

    def setUnit(self, unit):
        self.unit = unit

    def setPowerGradient(self, gradient):
        self.powerGradient = gradient

    def setDisplayPowerPath(self, displayPowerPath):
        self.displayPowerPath = displayPowerPath

    def setUnitTextColor(self, color):
        self.unitTextColor = color

    def setSpeedTextColor(self, color):
        self.speedTextColor = color

    def setPowerPathColor(self, color):
        self.powerPathColor = color

    def paintEvent(self, evt):
        x1 = QPoint(0, -70)
        x2 = QPoint(0, -90)
        #x3 = QPoint(-90,0)
        x4 = QPoint(-70, 0)
        extRect = QRectF(-90, -90, 180, 180)
        intRect = QRectF(-70, -70, 140, 140)
        #midRect = QRectF(-44,-80,160,160)
        unitRect = QRectF(-44, 60, 110, 50)

        speedInt = self.speed
        #speedDec = (self.speed * 10.0) - (speedInt * 10)
        s_SpeedInt = speedInt.__str__()[0:4]

        powerAngle = self.power * 270.0 / 100.0

        dummyPath = QPainterPath()
        dummyPath.moveTo(x1)
        dummyPath.arcMoveTo(intRect, 90 - powerAngle)
        powerPath = QPainterPath()
        powerPath.moveTo(x1)
        powerPath.lineTo(x2)
        powerPath.arcTo(extRect, 90, -1 * powerAngle)
        powerPath.lineTo(dummyPath.currentPosition())
        powerPath.arcTo(intRect, 90 - powerAngle, powerAngle)

        painter = QPainter(self)
        painter.setRenderHint(QPainter.Antialiasing)
        painter.translate(self.width() / 2, self.height() / 2)
        side = min(self.width(), self.height())
        painter.scale(side / (200.0 * self.pc), side / (200.0 * self.pc))

        painter.save()
        painter.rotate(-135)

        if self.displayPowerPath:
            externalPath = QPainterPath()
            externalPath.moveTo(x1)
            externalPath.lineTo(x2)
            externalPath.arcTo(extRect, 90, -270)
            externalPath.lineTo(x4)
            externalPath.arcTo(intRect, 180, 270)

            painter.setPen(self.powerPathColor)
            painter.drawPath(externalPath)

        painter.setBrush(self.powerGradient)
        painter.setPen(Qt.NoPen)
        painter.drawPath(powerPath)
        painter.restore()
        painter.save()

        painter.translate(QPointF(0, -50))

        painter.setPen(self.unitTextColor)
        fontFamily = self.font().family()
        unitFont = QFont(fontFamily, 14)
        painter.setFont(unitFont)
        painter.drawText(unitRect, Qt.AlignCenter, "{}".format(self.unit))

        painter.restore()

        painter.setPen(self.unitTextColor)
        fontFamily = self.font().family()
        unitFont = QFont(fontFamily, 25)
        painter.setFont(unitFont)
        painter.drawText(unitRect, Qt.AlignLeft, "{}".format(self.title))

        speedColor = QColor(0, 0, 0)
        speedFont = QFont(fontFamily, 40)
        fm1 = QFontMetrics(speedFont)
        speedWidth = fm1.width(s_SpeedInt)

        #speedDecFont = QFont(fontFamily, 23)
        #fm2 = QFontMetrics(speedDecFont)
        #speedDecWidth = fm2.width(s_SpeedDec)

        leftPos = -1 * speedWidth + 50
        leftDecPos = leftPos + speedWidth
        topPos = 10
        topDecPos = 100
        painter.setPen(self.speedTextColor)
        painter.setFont(speedFont)
        painter.drawText(leftPos, topPos, s_SpeedInt)
Exemple #24
0
# 线性渐变
linearGradient = QLinearGradient(0, 0, 1, 1)
linearGradient.setColorAt(0.0, Qt.green)
linearGradient.setColorAt(0.2, Qt.white)
linearGradient.setColorAt(0.4, Qt.blue)
linearGradient.setColorAt(0.6, Qt.red)
linearGradient.setColorAt(1.0, Qt.yellow)

print(GradientUtils.styleSheetCode(linearGradient))

# 辐射渐变
radialGradient = QRadialGradient(0, 0, 1, 1, 110)
radialGradient.setColorAt(0, Qt.green)
radialGradient.setColorAt(0.4, Qt.blue)
radialGradient.setColorAt(1.0, Qt.yellow)

print(GradientUtils.styleSheetCode(radialGradient))

# 弧度渐变
conicalGradient = QConicalGradient(0.5, 0.5, 0)
conicalGradient.setAngle(0.5)
conicalGradient.setColorAt(0, Qt.green)
conicalGradient.setColorAt(0.2, Qt.white)
conicalGradient.setColorAt(0.4, Qt.blue)
conicalGradient.setColorAt(0.6, Qt.red)
conicalGradient.setColorAt(0.8, Qt.yellow)

print(GradientUtils.styleSheetCode(conicalGradient))

print(GradientUtils.styleSheetCode(QColor(Qt.blue)))