用PyQt5设计饼状统计图(QPainterpath画扇形饼圆,画圆角矩形,鼠标mouseMoveEvent)

本文介绍了如何使用PyQt5的QPainterpath绘制饼状统计图,并实现鼠标悬停时的高亮效果。详细讲解了paintEvent重绘、扇形饼圆的绘制、图例文字和圆角矩形的绘制,以及mouseMoveEvent事件处理,提供了关键代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概要

该控件是参考了feiyangqingyun的广告占比图(Qt作品),更改了配色,重用PyQt5编写而成。原版在此:
https://blog.youkuaiyun.com/feiyangqingyun/article/details/98472081

成品图

先上成品图

当鼠标停在饼圆对应区域,该区域面积会扩大弹出,同时,对应下方的图例字体会变成黄色。
该项目的重难点主要有两个:1. 绘制饼圆; 2. 鼠标进入事件。
消费统计饼图

用QPainterpath绘制扇形饼圆

paintEvent重绘

当用户对窗口进行拉伸,移动,或者鼠标悬停在某个扇形饼圆区域,则触发paintEvent 对窗口元素进行重绘,其核心代码如下:

def paintEvent(self, event):
    # 绘制准备工作, 启用反锯齿
    painter = QtGui.QPainter(self)
    painter.setRenderHints(QtGui.QPainter.Antialiasing | QtGui.QPainter.TextAntialiasing)
    
    # 平移坐标中心,等比例缩放
    width = self.width()
    height = self.height()
    side = min(width, height)
    painter.translate(width / 2, height / 2) # 坐标中心移至窗口中心位置
    painter.scale(side / 200.0, side / 200.0) # 坐标刻度缩放为原来的(side/200)倍 

    # 画圆
    self.drawOuterCircle(painter) # 绘制外侧圆
    self.drawMidCircle(painter) # 绘制内侧圆
    self.drawOuterPie(painter) # 绘制外侧大的三色扇形饼圆
    self.drawInnerPie(painter) # 绘制内侧小的三色扇形饼圆
    self.drawLegend
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值