import sys
from PySide6.QtCore import QPointF
from PySide6.QtWidgets import *
from PySide6.QtGui import *
class MyWidget(QWidget):
def paintEvent(self, event):
painter = QPainter(self) # 设定画板
painter.setRenderHint(QPainter.Antialiasing) # 抗锯齿
size = min(self.width(), self.height())
center_pos = QPointF(size / 2, size / 2)
radius = size / 2
color = QColor(255, 0, 0) # 初始颜色
gradient = QConicalGradient(center_pos, 0) # 锥形梯度,中心点和起始角度
gradient.setColorAt(0, color) # 设置起始颜色
color.setAlpha(10) # 改变颜色的透明度
gradient.setColorAt(1, color) # 设置终点颜色
painter.setPen(QPen(gradient, 10, Qt.SolidLine)) # 设置画笔
painter.drawArc(10, 10, 280, 280, 0, 360 * 16) # 画最外圈圆弧
color.setAlpha(255) # 恢复颜色的透明度
gradient.setAngle(180) # 改变渐变的起始角度
gradient.setColorAt(0, color) # 设置起始颜色
color.setAlpha(10) # 改变颜色的透明度
gradient.setColorAt(0.5, color) # 设置终点颜色
painter.setPen(QPen(gradient, 10, Qt.SolidLine)) # 设置画笔
painter.drawArc(30, 30, 240, 240, 180 * 16, 180 * 16) # 画第二圈圆弧
color.setAlpha(255) # 恢复颜色的透明度
gradient.setAngle(90) # 改变渐变的起始角度
gradient.setColorAt(0, color) # 设置起始颜色
color.setAlpha(10) # 改变颜色的透明度
gradient.setColorAt(0.5, color) # 设置起始颜色
painter.setPen(QPen(gradient, 10, Qt.SolidLine)) # 设置画笔
painter.drawArc(50, 50, 200, 200, 270 * 16, -180 * 16) # 画最内圈圆弧
color.setAlpha(255) # 恢复颜色的透明度
if __name__ == '__main__':
app = QApplication(sys.argv)
widget = MyWidget()
widget.resize(300, 300)
widget.show()
sys.exit(app.exec())
知识点:
setAlpha() :单独改变颜色的透明度
setAngle():单独改变渐变的起始角度
注意渐变和圆弧的角度都是逆时针计算的。
画圆弧用setPen(),画饼(pie)或者别的实心填充图形用setBrush()。