如何在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
相关产品推荐
相关产品推荐

