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

如何在PyQt中使用QGraphicsEllipseItem绘制自定义椭圆图形?

实现方案

要实现自定义带闭合扇形区域的椭圆效果,直接调用QGraphicsEllipseItem的内置接口无法满足需求,推荐通过QGraphicsPathItem构造自定义绘制路径实现,步骤如下:

  • 先构造QPainterPath对象,先移动到椭圆的中心点
  • 调用arcTo方法添加指定起始角度、跨度角度的椭圆弧段,路径会自动从中心点连接到弧的起始点
  • 调用closeSubpath方法闭合路径,自动将弧的结束点连接回中心点
  • 最后将构造好的路径传给QGraphicsPathItem添加到场景即可

以下是可直接运行的PySide2示例代码:

from PySide2.QtWidgets import QGraphicsScene, QGraphicsView, QGraphicsPathItem, QApplication
from PySide2.QtGui import QPainterPath, QColor, QBrush
from PySide2.QtCore import QRectF
import sys

if __name__ == "__main__":
    app = QApplication(sys.argv)
    scene = QGraphicsScene()
    view = QGraphicsView(scene)
    view.resize(400, 300)

    # 定义椭圆外接矩形、起始角度、跨度角度(角度单位为1/16度,和QGraphicsEllipseItem的角度规则一致)
    ellipse_rect = QRectF(50, 50, 200, 150)
    ellipse_center = ellipse_rect.center()
    start_angle = 30 * 16  # 起始角度30度
    span_angle = 270 * 16  # 总跨度270度

    # 构造自定义绘制路径
    custom_path = QPainterPath()
    custom_path.moveTo(ellipse_center)
    # arcTo参数依次为:外接矩形、起始角度、弧跨度(单位为度)
    custom_path.arcTo(ellipse_rect, start_angle / 16, span_angle / 16)
    custom_path.closeSubpath()

    # 创建图形项并设置填充样式
    path_item = QGraphicsPathItem(custom_path)
    path_item.setBrush(QBrush(QColor(255, 165, 0)))
    scene.addItem(path_item)

    view.show()
    sys.exit(app.exec_())

如果你需要保留QGraphicsEllipseItem的其他内置功能,也可以选择继承QGraphicsEllipseItem重写paint方法,在绘制时用上述路径逻辑替换默认的椭圆绘制逻辑即可,参数可以直接复用父类的rect、startAngle、spanAngle属性,不需要额外定义。

内容的提问来源于stack exchange,提问作者jon_bovi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 06:06:03