Pyside6使用铅笔工具动态画彩虹

Pyside6使用铅笔工具画彩虹

使用Pyside6中的铅笔工具绘制彩虹圆
请添加图片描述

import sys
from PySide6.QtWidgets import QApplication, QWidget
from PySide6.QtGui import QPainter, QPen, QBrush, QColor, QFont, QFontMetrics
from PySide6.QtCore import Qt, QTimer, QRectF, QPointF


class GaugeWidget(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.value = 0  # 默认值
        self.max_value = 360
        self.min_value = 0
        self.setFixedSize(200, 200)

        # 创建一个定时器
        self.timer = QTimer(self)
        self.timer.timeout.connect(self.update_value)
        self.timer.start(100)  # 每隔N毫秒触发一次

    def update_value(self):
        # 更新仪表盘的值
        self.value = (self.value + 1) % (self.max_value + 1)
        self.update()  # 触发重绘



    def paintEvent(self, event):
        painter = QPainter(self)
        painter.setRenderHint(QPainter.Antialiasing)

        # 绘制背景圆弧
        painter.setPen(Qt.NoPen)
        painter.setBrush(QColor(240, 240, 240))
        painter.drawEllipse(15, 10, 180, 180)

        # 绘制进度条
        # 赤   Qt.SolidLine, Qt.RoundCap设置笔尖为圆
        painter.setPen(QPen(QColor(255,0,0), 6, Qt.SolidLine, Qt.RoundCap))
        painter.drawArc(10, 10, 180, 180, 90 * 16, -((self.value / self.max_value) * 360 * 16))
        # 橙
        painter.setPen(QPen(QColor(255,128,0), 6, Qt.SolidLine, Qt.RoundCap))
        painter.drawArc(15, 15, 170, 170, 90 * 16, -((self.value / self.max_value) * 360 * 16))
        # 黄
        painter.setPen(QPen(QColor(255,255,0), 6, Qt.SolidLine, Qt.RoundCap))
        painter.drawArc(20, 20, 160, 160, 90 * 16, -((self.value / self.max_value) * 360 * 16))
        # 绿
        painter.setPen(QPen(QColor(0,255,0),6, Qt.SolidLine, Qt.RoundCap))
        painter.drawArc(25, 25, 150, 150, 90 * 16, -((self.value / self.max_value) * 360 * 16))
        # 青
        painter.setPen(QPen(QColor(0,255,255), 6, Qt.SolidLine, Qt.RoundCap))
        painter.drawArc(30, 30, 140, 140, 90 * 16, -((self.value / self.max_value) * 360 * 16))
        # 蓝
        painter.setPen(QPen(QColor(0,0,255), 6, Qt.SolidLine, Qt.RoundCap))
        painter.drawArc(35, 35, 130, 130, 90 * 16, -((self.value / self.max_value) * 360 * 16))
        # 紫
        painter.setPen(QPen(QColor(128,0,255), 6, Qt.SolidLine, Qt.RoundCap))
        painter.drawArc(40, 40, 120, 120, 90 * 16, -((self.value / self.max_value) * 360 * 16))


        # 绘制指针
        painter.save()
        angle = (self.value / self.max_value) * 360 # + 90
        painter.translate(100, 100)
        painter.rotate(angle)
        painter.setPen(QPen(Qt.black, 2))
        painter.drawLine(QPointF(0, 0), QPointF(0, -50))
        painter.restore()

        # 绘制数值
        painter.setPen(QPen(Qt.black))
        painter.setFont(QFont('Arial', 24))
        fm = QFontMetrics(painter.font())
        text_width = fm.horizontalAdvance(str(int(self.value)))
        text_height = fm.height()
        painter.drawText(QRectF(100 - text_width / 2, 100 - text_height / 2, text_width, text_height), Qt.AlignCenter,
                         str(int(self.value)))




app = QApplication(sys.argv)
gauge = GaugeWidget()
gauge.show()
sys.exit(app.exec())
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值