如何为QGraphicsEllipseItem实现25%蓝、红交替透明的局部着色?
实现按角度划分的圆形着色方案
你之前使用的QRadialGradient是按半径距离实现渐变的,而你的需求是按角度划分扇形区域,所以应该改用QConicalGradient(锥形渐变)——它围绕圆心按角度分布颜色,正好匹配你的需求。
以下是修改后的代码:
from PyQt5.QtWidgets import QGraphicsEllipseItem from PyQt5.QtGui import QPen, QBrush, QConicalGradient from PyQt5.QtCore import Qt class CircleItem(QGraphicsEllipseItem): def __init__(self, x=0, y=0, radius=0): super().__init__(x - radius, y - radius, radius * 2, radius * 2) self.setPen(QPen(Qt.red, 2)) # 创建锥形渐变,以圆心为中心,起始角度为0度(右侧水平方向) center = self.boundingRect().center() gradient = QConicalGradient(center, 0) # 0-90度(占25%):蓝色 gradient.setColorAt(0, Qt.blue) gradient.setColorAt(0.25, Qt.blue) # 90-180度(占25%):透明 gradient.setColorAt(0.25, Qt.transparent) gradient.setColorAt(0.5, Qt.transparent) # 180-270度(占25%):红色 gradient.setColorAt(0.5, Qt.red) gradient.setColorAt(0.75, Qt.red) # 270-360度(占25%):透明 gradient.setColorAt(0.75, Qt.transparent) gradient.setColorAt(1, Qt.transparent) self.setBrush(QBrush(gradient))
关键细节说明:
QConicalGradient的第二个参数是起始角度(单位:度),0度对应右侧水平方向,若需要调整起始位置(比如从顶部开始),直接修改该值即可(例如设为90)。- 在每个区域的分界点(0.25、0.5、0.75)重复设置前后颜色,是为了取消默认的平滑过渡,实现清晰的扇形边界。
- 每个区域恰好占360度的25%(90度),完全匹配你的需求。
内容的提问来源于stack exchange,提问作者Vlad
相关产品推荐
相关产品推荐

