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())