【PySide6】QChart笔记(三)—— QPieSeries的使用
一、QPieSeries简介
1. 官方描述
https://doc.qt.io/qtforpython-6/PySide6/QtCharts/QPieSeries.html
一个饼图序列(QPieSeries)由一组 QPieSlice 类对象组成。slice的值可以是任意数值,当它被加入series后,QPieSeries 会计算出它占所有切片值总和的百分比,以便确定该切片在饼图中的实际大小。
饼图在图表中的大小【译注:包括 QPieSeries 的属性饼图大小size、空洞大小holeSize】和位置【译注:属性horizontalPosition】都由一个 [0.0, 1.0] 范围内的浮点值来控制。该值控制饼图属性的实际大小与饼图所在QChart矩形区域大小相关。
默认情况下,饼图有一个完整的圆周。
一个不完整的饼图可以通过设置QPieSeries的起始角度【译注:指属性startAngle,设置方法为setPieStartAngle()】和生长角度【译注:原文"angle span",但官方文档没有相关属性和方法,仅有一个endAngle符合该情景,其设置方法为setPieEndAngle()】来实现。
一个完整的饼图是360°,它的0°在12点钟的方向【译注:也就是正上方】。
1.1 属性
| 属性 | 描述 | 备注 |
|---|---|---|
| count | 切片数量 | |
| sum | 所有切片数值总和 | |
| startAngle | 饼图开始的角度。默认值为0 | 数值没有限制,甚至可以在 [-360, 360] 之外 |
| endAngle | 饼图结束的角度。默认值为360 | 数值没有限制,甚至可以在 [-360, 360] 之外。 若startAngle > endAngle,那么饼图将逆时针生长; 若startAngle与endAngle的差值大于360,那么饼图会出现重叠现象 |
| size | 饼图大小。默认值为0.7 | 取值范围 [0, 1] 。是相对于饼图所在QChart的矩形区域而言的。 若取值为0,那么饼图不会显示; 若取值为1,那么饼图占满QChart的矩形区域,也就是饼图的边界与QChart的矩形内接 |
| holeSize | 饼图中心空洞的大小。默认值为0 | 取值范围 [0, 1] 。是相对于饼图所在QChart的矩形区域而言的。 若取值为0,那么没有空洞; 若取值为1,那么空洞占满饼图,也就没有显示饼图; 若holeSize > size,那么饼图不会显示(相当于饼图被一个背景色的圆形完全遮挡) |
| horizontalPosition | 饼图的水平位置。默认值为0.5 | 取值范围 [0, 1] 。是饼图的圆心相对于饼图所在QChart的左右边界范围而言的。 若取值为0,那么圆心在QChart的左边界上; 若取值为1,那么圆心在QChart的右边界上 |
| verticalPosition | 饼图的垂直位置。默认值为0.5 | 取值范围 [0, 1] 。是饼图的圆心相对于饼图所在QChart的上下边界范围而言的。 若取值为0,那么圆心在QChart的上边界上; 若取值为1,那么圆心在QChart的下边界上 |
1.2 信号
| 信号 | 描述 |
|---|---|
| hovered(slice, state) | 鼠标悬停到切片,或离开切片时触发。鼠标悬停到切片时,status为True,离开时为False |
2. 官方用例
https://doc.qt.io/qtforpython-6/examples/example_charts_piechart.html
该用例绘制了含有5个切片的饼图。

2.1 创建饼图
# Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
"""PySide6 port of the Pie Chart Example from Qt v5.x"""
import sys
from PySide6.QtCore import Qt
from PySide6.QtGui import QPainter, QPen
from PySide6.QtWidgets import QMainWindow, QApplication
from PySide6.QtCharts import QChart, QChartView, QPieSeries
class TestChart(QMainWindow):
def __init__(self):
super().__init__()
# 创建饼图序列QPieSeries
self.series = QPieSeries()
# 向QPieSeries中添加切片 (3种append方法之一:直接传入标签和数值)
self.series.append('Jane', 1)
self.series.append('Joe', 2)
self.series.append('Andy', 3)
self.series.append('Barbara', 4)
self.series.append('Axel', 5)
# 设置第二个切片QPieSlice的格式
self.slice = self.series.slices()[1]
# 使其分离饼图中心 (该方法的形参exploded默认为True)
self.slice.setExploded()
# 使标签可见 (该方法的形参visible默认为True)
self.slice.setLabelVisible()
# 设置该切片的轮廓颜色
self.slice.setPen(QPen(Qt.darkGreen, 2))
# 设置该切片的内部填充颜色
self.slice.setBrush(Qt.green)
self.chart = QChart()
self.chart.addSeries(self.series)
self.chart.setTitle('Simple piechart example')
self.chart.legend().hide()
self._chart_view = QChartView(self.chart)
self._chart_view.setRenderHint(QPainter.Antialiasing)
self.setCentralWidget(self._chart_view)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = TestChart()
window.show()
window.resize(440, 300)
sys.exit(app.exec())
二、实践
1. 用例说明
用支出类型及其数值,绘制饼图。

2. 代码实现
from PySide6.QtCharts import QChart, QChartView, QPieSeries, QPieSlice
from PySide6.QtGui import QPainter
from PySide6.QtWidgets import QApplication, QMainWindow
# 鼠标悬停在切片slice上时触发
def onHovered(the_slice: QPieSlice, state: bool):
the_slice.setExploded(state)
the_slice.setLabelVisible(state)
pure_label = the_slice.label().split(' ')[0]
if state:
the_slice.setLabel(f'{pure_label} {the_slice.value()} {the_slice.percentage():.0%}')
else:
the_slice.setLabel(pure_label)
app = QApplication([])
window = QMainWindow()
chart = QChart()
chart.setTitle('支出统计')
chart.setAnimationOptions(QChart.AnimationOption.SeriesAnimations)
# 准备数据
axisY_value1 = [10 - 2 * i for i in range(5)]
axisY_value2 = [5 + i * (-1) ** i for i in range(5)]
# 创建饼图切片slice
slice_eating = QPieSlice('饮食', 900)
slice_go_out = QPieSlice('出行', 300)
slice_shelter = QPieSlice('居住', 800)
slice_clothing = QPieSlice('服饰', 300)
slice_entertainment = QPieSlice('娱乐', 500)
slice_list = [slice_eating, slice_go_out, slice_shelter, slice_clothing, slice_entertainment]
# 创建饼图序列series
pie_series = QPieSeries()
# 绑定信号与槽
pie_series.hovered.connect(onHovered)
# 将slice加入series
pie_series.append(slice_list)
# 将series加入chart
chart.addSeries(pie_series)
# 显示图表
chartView = QChartView(chart)
chartView.setRenderHint(QPainter.Antialiasing)
window.setCentralWidget(chartView)
window.show()
# 更新数据
pie_series.clear()
new_value = [(i + 2) * 10 for i in range(5)]
slice_new_list = [QPieSlice(f'饮食{i + 1}', new_value[i]) for i in range(5)]
pie_series.append(slice_new_list)
window.resize(500, 400)
app.exec()
三、问题与总结
比较简单,暂时未遇到问题
【PySide6】QChart笔记(三)—— QPieSeries的使用的更多相关文章
- Oracle学习笔记三 SQL命令
SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)
- 《CMake实践》笔记三:构建静态库(.a) 与 动态库(.so) 及 如何使用外部共享库和头文件
<CMake实践>笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE <CMake实践>笔记二:INSTALL/CMAKE_INSTALL_PREFIX &l ...
- Mastering Web Application Development with AngularJS 读书笔记(三)
第一章笔记 (三) 一.Factories factory 方法是创建对象的另一种方式,与service相比更灵活,因为可以注册可任何任意对象创造功能.例如: myMod.factory('notif ...
- Python 学习笔记三
笔记三:函数 笔记二已取消置顶链接地址:http://www.cnblogs.com/dzzy/p/5289186.html 函数的作用: 給代码段命名,就像变量給数字命名一样 可以接收参数,像arg ...
- 《MFC游戏开发》笔记三 游戏贴图与透明特效的实现
本系列文章由七十一雾央编写,转载请注明出处. 313239 作者:七十一雾央 新浪微博:http://weibo.com/1689160943/profile?rightmod=1&wvr=5 ...
- [Firefly引擎][学习笔记三][已完结]所需模块封装
原地址:http://www.9miao.com/question-15-54671.html 学习笔记一传送门学习笔记二传送门 学习笔记三导读: 笔记三主要就是各个模块的封装了,这里贴 ...
- JSP学习笔记(三):简单的Tomcat Web服务器
注意:每次对Tomcat配置文件进行修改后,必须重启Tomcat 在E盘的DATA文件夹中创建TomcatDemo文件夹,并将Tomcat安装路径下的webapps/ROOT中的WEB-INF文件夹复 ...
- 构建高性能WEB站点笔记三
构建高性能WEB站点笔记三 第10章 分布式缓存 10.1数据库的前端缓存区 文件系统内核缓冲区,位于物理内存的内核地址空间,除了使用O_DIRECT标记打开的文件以外,所有对磁盘文件的读写操作都要经 ...
- Git 笔记三 Git的初步使用
Git 笔记三 Git的初步使用 在上一篇中,学习了如何配置Git环境,这一篇,开始学习Git的初步使用.Git的初步使用还是很简单的.总体上知道git init, git clone, git ad ...
- java之jvm学习笔记三(Class文件检验器)
java之jvm学习笔记三(Class文件检验器) 前面的学习我们知道了class文件被类装载器所装载,但是在装载class文件之前或之后,class文件实际上还需要被校验,这就是今天的学习主题,cl ...
随机推荐
- GoRedisLock:Golang保障数据一致性的分布式锁解决方案
在现代分布式系统中,多个节点之间共享资源是常见的需求.然而,并发访问共享资源可能导致数据不一致性和竞争条件.为了解决这些问题,我们需要引入分布式锁.GoRedisLock是一个出色的分布式锁库,它结合 ...
- QPushButton按钮的使用
1 import sys 2 from PyQt5.QtCore import * 3 from PyQt5.QtGui import * 4 from PyQt5.QtWidgets import ...
- 2023牛客暑期多校训练营7 CGILM
比赛链接 C 题解 知识点:位运算,贪心. 我们用分段的思想考虑大小关系,若在同一段则大小不能确定,一开始为 \([1,n]\) . 我们按位从高到低考虑,某位如果 \(b_i\) 产生了 \(1\) ...
- 质效提升 | QA不做业务需求测试,你怎么看?
因为有的小伙伴看到公司的QA不测试业务需求,只搞流程.卡点.规范.技术创新.QA平台,行业洞察,让研发自测.研发担责上线bug和风险,所以问我,你怎么看QA不做业务需求测试这件事.其实我怎么看不重要 ...
- 文心一言 VS 讯飞星火 VS chatgpt (78)-- 算法导论7.4 2题
二.如果用go语言,证明:在最好情况下,快速排序的运行时间为 Ω(nlgn). 文心一言: 在最好情况下,快速排序的运行时间为Ω(nlgn)的证明如下: 快速排序是一种分治算法,它将一个数组分成两个子 ...
- OptiX8入门(一)optixHello
本人初学者,如有错误和更好的表述,请指出 环境:CLion+VS2022+CUDA Toolkit 12.0.1+OptiX8 下载好后打开SDK就可以看到OptiX官方提供的许多例子,CMake配置 ...
- MQ系列14:MQ如何做到消息延时处理
MQ系列1:消息中间件执行原理 MQ系列2:消息中间件的技术选型 MQ系列3:RocketMQ 架构分析 MQ系列4:NameServer 原理解析 MQ系列5:RocketMQ消息的发送模式 MQ系 ...
- DevSecOps之应用安全测试工具及选型
上篇文章,有同学私信想了解有哪些DevSecOps工具,这里整理出来,供大家参考(PS: 非专业安全人士,仅从DevOps建设角度,给出自己见解) 软件中的漏洞和弱点很常见:84%的软件漏洞都是利用应 ...
- EXE一机一码打包加密大师(EXE加密, 一机一码, 添加授权,添加静态密码,支持设置试用时间)
EXE一机一码打包加密大师可以打包加密保护EXE文件,同时给EXE文件添加上一机一码认证,或者静态密码,不同的电脑打开加密后的文件需要输入不同的激活码才能正常使用,保护文件安全,方便向用户收费. 下载 ...
- KRPANO资源分析工具下载VR-FACTORY全景图
示:目前分析工具中的全景图下载功能将被极速全景图下载大师替代,相比分析工具,极速全景图下载大师支持更多的网站(包括各类KRPano全景网站,和百度街景) 详细可以查看如下的链接: 极速全景图下载大师官 ...