예제 #1
0
    def drawPercent(self, painter: QPainter) -> None:
        painter.save()

        # 百分比选择框的区域要小于边框宽度,同时偏移一点,是的看起来美观
        offset: int = self.__borderWidth + 2
        y: int = int(self.__rightHeight * (1 - self.__percent / 100))

        # 禁用状态颜色要变暗
        pen: QPen = QPen()
        pen.setWidthF(self.__percentBorder)
        pen.setColor(self.__percentColor if self.isEnabled() else self.
                     __disableColor.name())

        painter.setPen(pen)
        painter.setBrush(QColor(0, 0, 0, 50))

        rect: QRect = QRect(offset, y + offset,
                            self.width() - offset * 2, self.__percentHeight)
        painter.drawRoundedRect(rect, self.__percentRadius,
                                self.__percentRadius)

        textFont: QFont = QFont()
        textFont.setPixelSize(rect.width() // 3)
        painter.setFont(textFont)

        if self.__showValue:
            painter.drawText(rect, Qt.AlignCenter, '%d' % round(self.__value))
        else:
            painter.drawText(rect, Qt.AlignCenter,
                             '%d%%' % round(self.__percent))

        painter.restore()
    def drawOverlay(self, painter: QPainter) -> None:
        if not self.__showOverlay: return

        radius: int = 80
        painter.save()
        painter.setPen(Qt.NoPen)

        smallCircle: QPainterPath = QPainterPath()
        bigCircle: QPainterPath = QPainterPath()
        radius -= 1
        smallCircle.addEllipse(-radius, -radius, radius * 2, radius * 2)
        radius *= 2
        bigCircle.addEllipse(-radius, -radius + 140, radius * 2, radius * 2)

        # 高光的形状为小圆扣掉大圆的部分
        highlight: QPainterPath = smallCircle - bigCircle

        linearGradient: QLinearGradient = QLinearGradient(0, -radius / 2, 0, 0)
        self.__overlayColor.setAlpha(100)
        linearGradient.setColorAt(0.0, self.__overlayColor)
        self.__overlayColor.setAlpha(30)
        linearGradient.setColorAt(1.0, self.__overlayColor)
        painter.setBrush(linearGradient)
        painter.rotate(-20)
        painter.drawPath(highlight)

        painter.restore()
예제 #3
0
    def paintEvent(self, event: QPaintEvent):
        p = QPainter(self)
        p.setBrush(QtCore.Qt.blue)
        p.drawRect(10, 10, self.width() - 20, self.height() - 20)
        p.setBrush(QtCore.Qt.yellow)
        p.drawEllipse(20, 20, self.width() - 40, self.height() - 40)

        p.save()
        p.translate(self.width() / 2,
                    self.height() / 2)  # permet de centrer l'aiguille
        p.save()
        p.save()
        p.rotate(270 + (360 / 60) * self.sec)
        penSec = QPen(QtCore.Qt.black, 1)
        p.setPen(penSec)
        p.drawLine(0, 0, (self.width() - 40) / 3, 0)
        p.restore()

        p.rotate(270 + (360 / 60) * self.min)
        penMin = QPen(QtCore.Qt.black, 3)
        p.setPen(penMin)
        p.drawLine(0, 0, (self.width() - 40) / 3, 0)
        p.restore()

        p.rotate(
            270 + (360 / 12) * (self.hour) + ((360 / 60) * (self.min)) / 30
        )  # formule a trouver pour avoir une aiguille qui tourne progressivement
        penHour = QPen(QtCore.Qt.black, 5)
        p.setPen(penHour)
        p.drawLine(0, 0, (self.width() - 40) / 5, 0)
        p.restore()

        p.setBrush(QtCore.Qt.magenta)
        p.drawEllipse((self.width() / 2) - 20, (self.height() / 2) - 20, 40,
                      40)
예제 #4
0
    def drawOverlay(self, painter: QPainter) -> None:
        # 如果没有启用绘制遮住颜色或者当前不可用则不用绘制
        if not self.__showOverlay or not self.isEnabled():
            return

        painter.save()

        # 根据当前百分比计算高度
        width: int = self.__bgRect.width() - self.__borderWidth
        height: int = self.__bgRect.height() - self.__borderWidth
        height = int(height - (self.__percent / 100) * height)

        if self.__outMode:
            overlayRect = QRect(self.__borderWidth,
                                self.__borderWidth + self.__percentHeight // 2,
                                width, height)
        else:
            overlayRect = QRect(self.__borderWidth, self.__borderWidth, width,
                                height)

        painter.setPen(Qt.NoPen)
        painter.setBrush(self.__overlayColor)
        painter.drawRect(overlayRect)

        painter.restore()
예제 #5
0
    def drawTriangle(self, painter: QPainter) -> None:
        if not self.__showTriangle: return

        painter.save()
        painter.setPen(Qt.NoPen)
        painter.setBrush(self.__triangleColor)

        # 绘制在右侧中间,根据设定的倒三角的边长设定三个点位置
        width: int = self.width()
        height: int = self.height()
        midWidth: int = width // 2
        midHeight: int = height // 2

        pts: QPolygon = QPolygon()
        if self.__trianglePosition == NavLabel.TrianglePosition.TrianglePosition_Left:
            pts.append(QPoint(self.__triangleLen, midHeight))
            pts.append(QPoint(0, midHeight - self.__triangleLen))
            pts.append(QPoint(0, midHeight + self.__triangleLen))
        elif self.__trianglePosition == NavLabel.TrianglePosition.TrianglePosition_Right:
            pts.append(QPoint(width - self.__triangleLen, midHeight))
            pts.append(QPoint(width, midHeight - self.__triangleLen))
            pts.append(QPoint(width, midHeight + self.__triangleLen))
        elif self.__trianglePosition == NavLabel.TrianglePosition.TrianglePosition_Top:
            pts.append(QPoint(midWidth, self.__triangleLen))
            pts.append(QPoint(midWidth - self.__triangleLen, 0))
            pts.append(QPoint(midWidth + self.__triangleLen, 0))
        elif self.__trianglePosition == NavLabel.TrianglePosition.TrianglePosition_Bottom:
            pts.append(QPoint(midWidth, height - self.__triangleLen))
            pts.append(QPoint(midWidth - self.__triangleLen, height))
            pts.append(QPoint(midWidth + self.__triangleLen, height))

        painter.drawPolygon(pts)

        painter.restore()
    def drawTitle(self, painter: QPainter) -> None:
        painter.save()

        painter.setPen(Qt.NoPen)
        painter.setBrush(self.__tempColor)

        offset: int = self.__borderWidth - self.__borderWidth // 3
        rect: QRect = QRect(offset, offset, self.width() - offset * 2, self.__titleHeight)
        painter.drawRect(rect)

        # 绘制标题文字
        if self.__isEnable:
            painter.setPen(self.__alarmTextColor if self.__isAlarm else self.__titleColor)
        else:
            painter.setPen(self.__titleDisableColor)

        painter.setFont(self.__titleFont)

        # 文字区域要重新计算
        offset = self.__borderWidth * 3
        textRect: QRect = QRect(offset, 0, self.width() - offset * 2, self.__titleHeight)

        align: Qt.Alignment = Qt.Alignment
        if self.__titleAlignment == PanelItem.Alignment.Alignment_Left:
            align = Qt.AlignLeft | Qt.AlignVCenter
        elif self.__titleAlignment == PanelItem.Alignment.Alignment_Center:
            align = Qt.AlignHCenter | Qt.AlignVCenter
        elif self.__titleAlignment == PanelItem.Alignment.Alignment_Right:
            align = Qt.AlignRight | Qt.AlignVCenter

        painter.drawText(textRect, align, self.__titleText)

        painter.restore()
예제 #7
0
    def drawArc(self, painter: QPainter, radius: int, angle: float,
                arc_color: QColor) -> None:
        painter.save()
        painter.setPen(Qt.NoPen)

        smallradius: int = radius - self.__radiusWidth
        maxRaidus: int = radius + self.__shadowWidth
        minRadius: int = smallradius - self.__shadowWidth

        # 采用圆形渐变,形成光晕效果
        radialGradient: QRadialGradient = QRadialGradient(
            QPointF(0, 0), maxRaidus)
        color: QColor = arc_color
        lightColor: QColor = arc_color.name()

        color.setAlphaF(0)
        radialGradient.setColorAt(0, color)
        radialGradient.setColorAt(minRadius * 1.0 / maxRaidus, color)
        color.setAlphaF(0.5)
        radialGradient.setColorAt(smallradius * 1.0 / maxRaidus, color)

        radialGradient.setColorAt((smallradius + 1) * 1.0 / maxRaidus,
                                  lightColor)
        radialGradient.setColorAt((radius - 1) * 1.0 / maxRaidus, lightColor)
        radialGradient.setColorAt(radius * 1.0 / maxRaidus, color)
        color.setAlphaF(0)
        radialGradient.setColorAt(1, color)

        painter.setBrush(QBrush(radialGradient))
        painter.drawPie(-maxRaidus, -maxRaidus, maxRaidus * 2, maxRaidus * 2,
                        90 * 16, int(-angle * 16))
        painter.restore()
예제 #8
0
    def drawText(self, painter: QPainter) -> None:
        painter.save()
        painter.setPen(Qt.NoPen)

        font: QFont = QFont()
        font.setBold(True)
        font.setPointSize(10)
        painter.setFont(font)

        now: QDateTime = QDateTime.currentDateTime()
        fm: QFontMetricsF = QFontMetricsF(font)
        textList: List[AnyStr] = [
            now.toString("MM月dd日yyyy"),
            now.toString("hh:mm:ss.zzz")
        ]

        # 绘制文本路径
        textPath: QPainterPath = QPainterPath()
        textPath.addText(-fm.width(textList[0]) / 2.0, -fm.lineSpacing() / 2.0,
                         font, textList[0])
        textPath.addText(-fm.width(textList[1]) / 2.0,
                         fm.lineSpacing() / 2.0, font, textList[1])

        strokeColor: QColor = self.__textColor.light(80)
        strokeColor.setAlphaF(0.2)
        painter.strokePath(
            textPath,
            QPen(strokeColor, self.__shadowWidth, Qt.SolidLine, Qt.RoundCap,
                 Qt.RoundJoin))
        painter.setBrush(self.__textColor)
        painter.drawPath(textPath)

        painter.restore()
예제 #9
0
    def paintEvent(self, event: QPaintEvent):
        p = QPainter(self)
        p.setBrush(QtCore.Qt.blue)

        taille = min(self.width(), self.height())

        p.drawRect(10, 10, taille - 20, taille - 20)
        p.setBrush(QtCore.Qt.yellow)
        p.drawEllipse(20, 20, taille - 40, taille - 40)

        p.save()

        p.translate(taille / 2, taille / 2)
        p.rotate(135 + (self.valeur * 270 / 100))

        pen = QPen(QtCore.Qt.black, 10)
        p.setPen(pen)
        p.drawLine(0, 0, (taille - 40) / 3, 0)

        p.restore()

        pen = QPen(QtCore.Qt.black, 5)
        p.setPen(pen)
        p.setBrush(QtCore.Qt.red)
        p.drawEllipse((taille / 2) - 20, (taille / 2) - 20, 40, 40)
    def drawBg(self, painter: QPainter = None) -> None:
        painter.save()

        if not self.__bgPix.isNull():
            painter.drawPixmap(0, 0, self.__bgPix)

        painter.restore()
예제 #11
0
    def drawBg(self, painter: QPainter) -> None:
        painter.save()

        # 如果悬停则绘制外边框和内边框
        if self.__hover or self.__hovered:
            painter.setBrush(Qt.NoBrush)

            pen: QPen = QPen()
            pen.setWidth(2)

            # 绘制外边框
            pen.setColor(self.__bgColor)
            painter.setPen(pen)
            painter.drawRect(5, 5, self.width() - 10, self.height() - 10)

            # 绘制里边框
            pen.setColor("#FFFFFF")
            painter.setPen(pen)
            painter.drawRect(7, 7, self.width() - 14, self.height() - 14)

        # 绘制里边背景
        painter.setPen(Qt.NoPen)
        painter.setBrush(QColor(self.__bgColor))
        painter.drawRect(8, 8, self.width() - 16, self.height() - 16)

        painter.restore()
예제 #12
0
    def drawText(self, painter: QPainter, index: int, offset: int) -> None:
        painter.save()

        width: int = self.width()
        height: int = self.height()
        strValue: str = str(self.__listValue[index])

        target: int = width if self.__horizontal else height

        font: QFont = painter.font()
        font.setPixelSize((target - abs(offset)) // 8)
        painter.setFont(font)

        if self.__horizontal:
            textWidth: int = painter.fontMetrics().width(strValue)
            initX: int = width // 2 + offset - textWidth // 2
            painter.drawText(QRect(initX, 0, textWidth, height),
                             Qt.AlignCenter, strValue)

            # 计算最后中间值停留的起始坐标,以便鼠标松开时矫正居中
            if index is self.__currentIndex: self.__currentPos = initX
        else:
            textHeight: int = painter.fontMetrics().height()
            initY: int = height // 2 + offset - textHeight // 2
            painter.drawText(QRect(0, initY, width, textHeight),
                             Qt.AlignCenter, strValue)

            # 计算最后中间值停留的起始坐标,以便鼠标松开时矫正居中
            if index is self.__currentIndex: self.__currentPos = initY

        painter.restore()
예제 #13
0
    def _draw_objects(self, painter: QPainter, level: Level):
        for level_object in level.get_all_objects():
            level_object.render()

            if level_object.description.lower() in SPECIAL_BACKGROUND_OBJECTS:
                width = LEVEL_MAX_LENGTH
                height = GROUND - level_object.y_position

                blocks_to_draw = [level_object.blocks[0]] * width * height

                for index, block_index in enumerate(blocks_to_draw):
                    x = level_object.x_position + index % width
                    y = level_object.y_position + index // width

                    level_object._draw_block(painter, block_index, x, y, self.block_length, False)
            else:
                level_object.draw(painter, self.block_length, self.transparency)

            if level_object.selected:
                painter.save()

                painter.setPen(QPen(QColor(0x00, 0x00, 0x00, 0x80), width=1))
                painter.drawRect(level_object.get_rect(self.block_length))

                painter.restore()
예제 #14
0
    def drawPointerIndicatorR(self, painter: QPainter) -> None:
        if not self.__showPointer: return

        radius: int = self.__radiusCircle - 15
        painter.save()

        pen: QPen = QPen()
        pen.setWidth(1)
        pen.setColor(self.__progressColor)
        painter.setPen(pen)
        painter.setBrush(self.__progressColor)

        pts: QPolygon = QPolygon()
        pts.append(QPoint(-8, 0))
        pts.append(QPoint(8, 0))
        pts.append(QPoint(0, radius))

        painter.rotate(self.__startAngle)
        degRotate: float = (360.0 - self.__startAngle - self.__endAngle) / (
            self.__maxValue - self.__minValue) * (self.__value -
                                                  self.__minValue)
        painter.rotate(degRotate)
        painter.drawConvexPolygon(pts)

        # 增加绘制圆角直线,与之前三角形重叠,形成圆角指针
        pen.setCapStyle(Qt.RoundCap)
        pen.setWidthF(4)
        painter.setPen(pen)
        painter.drawLine(0, 0, 0, radius)

        # 绘制中心圆点
        radius = radius // 4
        painter.drawEllipse(-radius, -radius, radius * 2, radius * 2)

        painter.restore()
예제 #15
0
    def paintEvent(self, event):
        painter = QPainter(self)
        painter.save()
        path = QPainterPath()

        painter.setFont(self.font)
        painter.setRenderHint(QPainter.Antialiasing)

        pen = QPen(QColor(0, 0, 0, 230))
        pen_width = 3
        pen.setWidth(pen_width)

        len = self.metrics.width(self.txt)
        w = self.width()
        px = (len - w) / 2
        if px < 0:
            px = -px
        py = (self.height() - self.metrics.height()) / 2 + self.metrics.ascent()
        if py < 0:
            py = -py

        path.addText(px + 2, py + 2, self.font, self.txt)
        painter.strokePath(path, pen)
        painter.drawPath(path)
        painter.fillPath(path, QBrush(self.color))
        painter.restore()
예제 #16
0
 def drawCoverCircle(self, painter: QPainter) -> None:
     radius: int = self.__radiusCoverCircle
     painter.save()
     painter.setPen(Qt.NoPen)
     painter.setBrush(self.__bgColor)
     painter.drawEllipse(-radius, -radius, radius * 2, radius * 2)
     painter.restore()
예제 #17
0
    def drawPointerIndicator(self, painter: QPainter) -> None:
        if not self.__showPointer: return

        radius: int = self.__radiusCircle - 15
        painter.save()
        painter.setPen(Qt.NoPen)
        painter.setBrush(self.__progressColor)

        pts: QPolygon = QPolygon()
        pts.append(QPoint(-8, 0))
        pts.append(QPoint(8, 0))
        pts.append(QPoint(0, radius))

        painter.rotate(self.__startAngle)
        degRotate: float = (360.0 - self.__startAngle - self.__endAngle) / (
            self.__maxValue - self.__minValue) * (self.__value -
                                                  self.__minValue)
        painter.rotate(degRotate)
        painter.drawConvexPolygon(pts)

        # 绘制中心圆点
        radius = radius // 4
        painter.drawEllipse(-radius, -radius, radius * 2, radius * 2)

        painter.restore()
예제 #18
0
    def drawLine(self, painter: QPainter) -> None:
        # 上下部分偏移量
        offset: int = 10
        width: int = self.width()
        height: int = self.height()

        painter.save()
        painter.setBrush(Qt.NoBrush)

        pen: QPen = QPen()
        pen.setWidth(3)
        pen.setColor(self.__lineColor)
        pen.setCapStyle(Qt.RoundCap)
        painter.setPen(pen)

        # 每次同时存在三个元素
        if self.__horizontal:
            painter.drawLine(width // 3 * 1, offset, width // 3 * 1,
                             height - offset)
            painter.drawLine(width // 3 * 2, offset, width // 3 * 2,
                             height - offset)
        else:
            painter.drawLine(offset, height // 3 * 1, width - offset,
                             height // 3 * 1)
            painter.drawLine(offset, height // 3 * 2, width - offset,
                             height // 3 * 2)

        painter.restore()
예제 #19
0
    def drawLine(self, painter: QPainter) -> None:
        """  """
        if not self.__showLine:
            return

        if not self.isChecked():
            return

        painter.save()

        pen: QPen = QPen()
        pen.setWidth(self.__lineWidth)
        pen.setColor(self.__lineColor)
        painter.setPen(pen)

        # 根据线条位置设置线条坐标
        pointStart: QPoint = QPoint()
        pointEnd: QPoint = QPoint()
        if self.__linePosition == NavButton.LinePosition.LINEPOSITION_LEFT:
            pointStart = QPoint(0, 0)
            pointEnd = QPoint(0, self.height())
        elif self.__linePosition == NavButton.LinePosition.LINEPOSITION_RIGHT:
            pointStart = QPoint(self.width(), 0)
            pointEnd = QPoint(self.width(), self.height())
        elif self.__linePosition == NavButton.LinePosition.LINEPOSITION_TOP:
            pointStart = QPoint(0, 0)
            pointEnd = QPoint(self.width(), 0)
        elif self.__linePosition == NavButton.LinePosition.LINEPOSITION_BOTTOM:
            pointStart = QPoint(0, self.height())
            pointEnd = QPoint(self.width(), self.height())

        painter.drawLine(pointStart, pointEnd)

        painter.restore()
    def drawText_TB(self, painter: QPainter) -> None:
        width: int = self.width() // self.__maxStep
        height: int = self.height() // 3
        initX: int = 0
        initY: int = 0

        painter.save()
        font: QFont = QFont()
        font.setPixelSize(height // 3)
        painter.setFont(font)
        painter.setPen(self.__background)
        painter.setBrush(Qt.NoBrush)

        # 绘制上部分文字
        for i in range(self.__maxStep):
            textRect: QRect = QRect(initX, initY, width, height)
            painter.drawText(textRect, Qt.AlignCenter, self.__topInfo[i])
            initX += width

        # 绘制下部分文字
        initX = 0
        initY: int = self.height() // 3 * 2

        for i in range(self.__currentStep):
            textRect: QRect = QRect(initX, initY, width, height)
            painter.drawText(textRect, Qt.AlignCenter, self.__bottomInfo[i])
            initX += width

        painter.restore()
    def drawBg_ZFB(self, painter: QPainter) -> None:
        painter.save()

        # 圆半径为高度一定比例,计算宽度,将宽度等分
        width: int = self.width() // self.__maxStep
        height: int = self.height() // 3
        radius: int = height // 3
        initX: int = width // 2
        initY: int = self.height() // 2

        # 逐个绘制连接线条
        pen: QPen = QPen()
        pen.setWidthF(radius // 4)
        pen.setCapStyle(Qt.RoundCap)
        pen.setColor(self.__background)
        painter.setPen(pen)
        painter.setBrush(Qt.NoBrush)

        for i in range(self.__maxStep - 1):
            painter.drawLine(QPoint(initX, initY),
                             QPoint(initX + width, initY))
            initX += width

        # 逐个绘制圆
        initX: int = width // 2
        painter.setPen(Qt.NoPen)
        painter.setBrush(self.__background)

        for i in range(self.__maxStep):
            painter.drawEllipse(QPoint(initX, initY), radius, radius)
            initX += width

        painter.restore()
예제 #22
0
    def drawSign(self, painter: QPainter) -> None:
        painter.save()

        # 如果当前选中则绘制角标
        if self.__checked:
            # 计算角标区域
            rec: QRect = QRect(self.width() - self.__signSize,
                               self.height() - self.__signSize,
                               self.__signSize, self.__signSize)

            # 绘制带边框背景
            pen: QPen = QPen()
            pen.setWidth(3)
            pen.setColor("#FFFFFF")

            painter.setPen(pen)
            painter.setBrush(QColor(self.__signColor))
            painter.drawEllipse(rec.x() + 3,
                                rec.y() + 3, self.__signSize - 6,
                                self.__signSize - 6)

            # 绘制文字
            self.__iconFont.setPixelSize(16)
            painter.setFont(self.__iconFont)
            painter.drawText(rec, Qt.AlignCenter, chr(0xf00c))

        painter.restore()
예제 #23
0
    def paintEvent(self, event):
        rect = QRect(10, 20, 80, 60)

        path = QPainterPath()
        path.moveTo(20, 80)
        path.lineTo(20, 30)
        path.cubicTo(80, 0, 50, 50, 80, 80)

        startAngle = 30 * 16
        arcLength = 120 * 16

        painter = QPainter(self)
        painter.setPen(self.pen)
        painter.setBrush(self.brush)
        if self.antialiased:
            painter.setRenderHint(QPainter.Antialiasing)

        for x in range(0, self.width(), 100):
            for y in range(0, self.height(), 100):
                painter.save()
                painter.translate(x, y)
                if self.transformed:
                    painter.translate(50, 50)
                    painter.rotate(60.0)
                    painter.scale(0.6, 0.9)
                    painter.translate(-50, -50)

                if self.shape == RenderArea.Line:
                    painter.drawLine(rect.bottomLeft(), rect.topRight())
                elif self.shape == RenderArea.Points:
                    painter.drawPoints(RenderArea.points)
                elif self.shape == RenderArea.Polyline:
                    painter.drawPolyline(RenderArea.points)
                elif self.shape == RenderArea.Polygon:
                    painter.drawPolygon(RenderArea.points)
                elif self.shape == RenderArea.Rect:
                    painter.drawRect(rect)
                elif self.shape == RenderArea.RoundedRect:
                    painter.drawRoundedRect(rect, 25, 25, Qt.RelativeSize)
                elif self.shape == RenderArea.Ellipse:
                    painter.drawEllipse(rect)
                elif self.shape == RenderArea.Arc:
                    painter.drawArc(rect, startAngle, arcLength)
                elif self.shape == RenderArea.Chord:
                    painter.drawChord(rect, startAngle, arcLength)
                elif self.shape == RenderArea.Pie:
                    painter.drawPie(rect, startAngle, arcLength)
                elif self.shape == RenderArea.Path:
                    painter.drawPath(path)
                elif self.shape == RenderArea.Text:
                    painter.drawText(rect, Qt.AlignCenter,
                                     "PySide 2\nQt %s" % qVersion())
                elif self.shape == RenderArea.Pixmap:
                    painter.drawPixmap(10, 10, self.pixmap)

                painter.restore()

        painter.setPen(self.palette().dark().color())
        painter.setBrush(Qt.NoBrush)
        painter.drawRect(QRect(0, 0, self.width() - 1, self.height() - 1))
예제 #24
0
    def paintEvent(self, event:QPaintEvent):
        p = QPainter(self)
        p.setBrush(Qt.blue)
        p.drawRect(10,10,self.width()-20, self.height()-20)
        p.setBrush(Qt.yellow)
        p.drawEllipse(20,20,self.width()-40, self.height()-40)

        p.save()

        p.translate(self.width()/2,self.height()/2)

        p.save()

        p.rotate((-90 + self.heure*30)+(self.minute)/2)
        pen = QPen(Qt.green,10)
        p.setPen(pen)
        p.drawLine(0,0,(self.width()-40)/5,0)

        p.restore()

        p.rotate(-90 + self.minute*6)
        pen = QPen(Qt.black, 10)
        p.setPen(pen)
        p.drawLine(0, 0, (self.width() - 40) / 3, 0)

        p.restore()

        p.setBrush(Qt.red)
        p.drawEllipse((self.width()/2)-20,(self.height()/2)-20,40, 40)
예제 #25
0
    def paintEvent(self, event):
        rect = QRect(10, 20, 80, 60)

        path = QPainterPath()
        path.moveTo(20, 80)
        path.lineTo(20, 30)
        path.cubicTo(80, 0, 50, 50, 80, 80)

        startAngle = 30 * 16
        arcLength = 120 * 16

        painter = QPainter(self)
        painter.setPen(self.pen)
        painter.setBrush(self.brush)
        if self.antialiased:
            painter.setRenderHint(QPainter.Antialiasing)

        for x in range(0, self.width(), 100):
            for y in range(0, self.height(), 100):
                painter.save()
                painter.translate(x, y)
                if self.transformed:
                    painter.translate(50, 50)
                    painter.rotate(60.0)
                    painter.scale(0.6, 0.9)
                    painter.translate(-50, -50)

                if self.shape == RenderArea.Line:
                    painter.drawLine(rect.bottomLeft(), rect.topRight())
                elif self.shape == RenderArea.Points:
                    painter.drawPoints(RenderArea.points)
                elif self.shape == RenderArea.Polyline:
                    painter.drawPolyline(RenderArea.points)
                elif self.shape == RenderArea.Polygon:
                    painter.drawPolygon(RenderArea.points)
                elif self.shape == RenderArea.Rect:
                    painter.drawRect(rect)
                elif self.shape == RenderArea.RoundedRect:
                    painter.drawRoundedRect(rect, 25, 25, Qt.RelativeSize)
                elif self.shape == RenderArea.Ellipse:
                    painter.drawEllipse(rect)
                elif self.shape == RenderArea.Arc:
                    painter.drawArc(rect, startAngle, arcLength)
                elif self.shape == RenderArea.Chord:
                    painter.drawChord(rect, startAngle, arcLength)
                elif self.shape == RenderArea.Pie:
                    painter.drawPie(rect, startAngle, arcLength)
                elif self.shape == RenderArea.Path:
                    painter.drawPath(path)
                elif self.shape == RenderArea.Text:
                    painter.drawText(rect, Qt.AlignCenter,
                                     "PySide 2\nQt %s" % qVersion())
                elif self.shape == RenderArea.Pixmap:
                    painter.drawPixmap(10, 10, self.pixmap)

                painter.restore()

        painter.setPen(self.palette().dark().color())
        painter.setBrush(Qt.NoBrush)
        painter.drawRect(QRect(0, 0, self.width() - 1, self.height() - 1))
 def paintEvent(self, event):
     side = min(self.width(), self.height())
     time = QTime.currentTime()
     painter = QPainter(self)
     painter.setRenderHint(QPainter.Antialiasing)
     painter.translate(self.width() / 2, self.height() / 2)
     painter.scale(side / 200.0, side / 200.0)
     painter.setPen(Qt.NoPen)
     painter.setBrush(AnalogClock.hourColor)
     painter.save()
     painter.rotate(30.0 * ((time.hour() + time.minute() / 60.0)))
     painter.drawConvexPolygon(AnalogClock.hourHand)
     painter.restore()
     painter.setPen(AnalogClock.hourColor)
     for i in range(12):
         painter.drawLine(88, 0, 96, 0)
         painter.rotate(30.0)
     painter.setPen(Qt.NoPen)
     painter.setBrush(AnalogClock.minuteColor)
     painter.save()
     painter.rotate(6.0 * (time.minute() + time.second() / 60.0))
     painter.drawConvexPolygon(AnalogClock.minuteHand)
     painter.restore()
     painter.setPen(AnalogClock.minuteColor)
     for j in range(60):
         if (j % 5) != 0:
             painter.drawLine(92, 0, 96, 0)
         painter.rotate(6.0)
    def drawBg(self, painter: QPainter) -> None:
        painter.save()
        width: int = self.width()
        height: int = self.height()
        side: int = min(width, height)

        pen: QPen = QPen()
        pen.setWidth(self.__borderWidth)
        pen.setColor(self.__borderColor)
        painter.setPen(pen if self.__borderWidth > 0 else Qt.NoPen)
        painter.setBrush(self.bgColor)

        rect: QRect = QRect(
            ((width - self.__tempWidth) // 2) + self.__borderWidth,
            self.__borderWidth, self.__tempWidth - (self.__borderWidth * 2),
            height - (self.__borderWidth * 2))
        painter.drawRoundedRect(rect, self.__borderRadius, self.__borderRadius)

        font: QFont = QFont()
        font.setPixelSize(side - 18)
        painter.setFont(font)
        painter.setPen(self.__lineColor)
        painter.drawText(rect, Qt.AlignCenter,
                         "完成" if self.__status == 2 else "开始")

        painter.restore()
예제 #28
0
 def drawBg(self, painter: QPainter) -> None:
     radius: int = 99
     painter.save()
     painter.setPen(Qt.NoPen)
     painter.setBrush(self.__bgColor)
     painter.drawEllipse(-radius, -radius, radius * 2, radius * 2)
     painter.restore()
    def _draw_item_background(self, p: QPainter):
        """
        绘制项目的背景
        :param p: 画刷
        :return: None
        """
        if self._m_start_rect.isNull():
            return

        p.save()
        lgt = QLinearGradient(self._m_start_rect.topLeft(), self._m_start_rect.bottomRight())
        lgt.setColorAt(0.0, self._m_item_start_color)
        lgt.setColorAt(1.0, self._m_item_end_color)
        p.setPen(Qt.NoPen)
        p.setBrush(lgt)
        p.drawRoundedRect(self._m_start_rect, self._m_item_radius, self._m_item_radius)

        # 绘制 hover 状态下的item
        if self._m_current_hover_index != -1:
            hover_rect = QRectF(self._m_item_maps[self._m_current_hover_index][1])
            lgt = QLinearGradient(hover_rect.topLeft(), hover_rect.bottomRight())
            lgt.setColorAt(0.0, self._m_item_hover_start_color)
            lgt.setColorAt(1.0, self._m_item_hover_end_color)
            p.setPen(Qt.NoPen)
            p.setBrush(lgt)
            p.drawRoundedRect(hover_rect, self._m_item_radius, self._m_item_radius)
        p.restore()
예제 #30
0
    def drawColorPie(self, painter: QPainter) -> None:
        radius: int = 95
        painter.save()
        painter.setPen(Qt.NoPen)

        rect: QRectF = QRectF(-radius, -radius, radius * 2, radius * 2)

        # 计算总范围角度,当前值范围角度,剩余值范围角度
        angleAll: float = 360.0 - self.__startAngle - self.__endAngle
        angleCurrent: float = angleAll * ((self.__value - self.__minValue) /
                                          (self.__maxValue - self.__minValue))
        angleOther: float = angleAll - angleCurrent

        # 绘制当前值饼圆
        painter.setBrush(self.__progressColor)
        painter.drawPie(rect, (270 - self.__startAngle - angleCurrent) * 16,
                        angleCurrent * 16)

        # 绘制剩余值饼圆
        painter.setBrush(self.__progressBgColor)
        painter.drawPie(
            rect, (270 - self.__startAngle - angleCurrent - angleOther) * 16,
            angleOther * 16)

        painter.restore()
예제 #31
0
    def paint(
        self, painter: QPainter, rect: QRect, mode: QIcon.Mode, state: QIcon.State
    ):
        """override"""
        font = FIconEngine.font if hasattr(FIconEngine, "font") else painter.font()

        # The following test is to avoid crash when running python widget outside the __main__.my
        if not font:
            font = painter.font()
            return

        painter.save()

        if self.color:
            painter.setPen(QPen(self.color))

        else:
            if mode == QIcon.Disabled:
                painter.setPen(
                    QPen(self.palette.color(QPalette.Disabled, QPalette.ButtonText))
                )
            else:
                painter.setPen(QPen(self.palette.color(QPalette.Active, QPalette.Text)))

        font.setPixelSize(rect.size().width())

        painter.setFont(font)
        # painter.setRenderHint(QPainter.HighQualityAntialiasing, True)
        painter.drawText(
            rect, Qt.AlignCenter | Qt.AlignVCenter, str(chr(self.hex_character))
        )
        painter.restore()
예제 #32
0
    def paintEvent(self, event):
        painter = QPainter(self)
        painter.fillRect(self.rect(), Qt.black)

        if self.pixmap.isNull():
            painter.setPen(Qt.white)
            painter.drawText(self.rect(), Qt.AlignCenter,
                    "Rendering initial image, please wait...")
            return

        if self.curScale == self.pixmapScale:
            painter.drawPixmap(self.pixmapOffset, self.pixmap)
        else:
            scaleFactor = self.pixmapScale / self.curScale
            newWidth = int(self.pixmap.width() * scaleFactor)
            newHeight = int(self.pixmap.height() * scaleFactor)
            newX = self.pixmapOffset.x() + (self.pixmap.width() - newWidth) / 2
            newY = self.pixmapOffset.y() + (self.pixmap.height() - newHeight) / 2

            painter.save()
            painter.translate(newX, newY)
            painter.scale(scaleFactor, scaleFactor)
            exposed, _ = painter.matrix().inverted()
            exposed = exposed.mapRect(self.rect()).adjusted(-1, -1, 1, 1)
            painter.drawPixmap(exposed, self.pixmap, exposed)
            painter.restore()

        text = "Use mouse wheel or the '+' and '-' keys to zoom. Press and " \
                "hold left mouse button to scroll."
        metrics = painter.fontMetrics()
        textWidth = metrics.width(text)

        painter.setPen(Qt.NoPen)
        painter.setBrush(QColor(0, 0, 0, 127))
        painter.drawRect((self.width() - textWidth) / 2 - 5, 0, textWidth + 10,
                metrics.lineSpacing() + 5)
        painter.setPen(Qt.white)
        painter.drawText((self.width() - textWidth) / 2,
                metrics.leading() + metrics.ascent(), text)