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)
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 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)
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))
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))
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)
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)
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)
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)
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)
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)
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)
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
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()
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()
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()
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)
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()
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)
# 线性渐变 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)))