You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 04:00:28