PyQt6基础_QCharts绘制饼状图
前置:
PyQt6中没有QtCharts包,需要安装 pip install PyQt6-Charts
结果:
1 高亮内容固定突出,并显示文本
2 鼠标悬浮在其他扇区,临时突出显示并显示文本
代码:
import sys
from PyQt6.QtCore import Qt,QSize
from PyQt6.QtGui import QPainter, QPen
from PyQt6.QtWidgets import QApplication,QWidget,QVBoxLayout
from PyQt6.QtCharts import QChart, QChartView, QPieSeries,QPieSliceclass PieChart(QWidget):def __init__(self,data:dict):super().__init__()'''data = {title:strtarget_int: int # 高亮值的索引data_list: [(str,float,str),(str,float,str)...]}'''self.setMinimumSize(QSize(600,400))self.data = dataself.series = QPieSeries()for item in self.data['data_list']:item_str = f"{item[0]} {item[1]} {item[2]}"self.series.append(item_str,item[1])passself.series.hovered.connect(self.series_hovered)self.slice = self.series.slices()[self.data['target_int']]self.slice.setExploded()self.slice.setLabelVisible()self.slice.setPen(QPen(Qt.GlobalColor.darkGreen, 2))self.slice.setBrush(Qt.GlobalColor.green)self.chart = QChart()self.chart.addSeries(self.series)self.chart.setTitle(self.data['title'])self.chart.legend().hide()self._chart_view = QChartView(self.chart)self._chart_view.setRenderHint(QPainter.RenderHint.Antialiasing)layout = QVBoxLayout()layout.addWidget(self._chart_view)self.setLayout(layout)passdef series_hovered(self,a0:QPieSlice,state:bool):if a0 == self.slice:returnif state:a0.setExploded()a0.setLabelVisible()else:a0.setExploded(False)a0.setLabelVisible(False)passif __name__ == "__main__":app = QApplication(sys.argv)pre_data = {'title':'测试饼状图','target_int':2,'data_list':[('长江水电',100,'10%'),('京沪高铁',200,'20%'),('贵州茅台',400,'40%'),('农业银行',50,'5%'),('长电科技',250,'25%')]}window = PieChart(pre_data)window.show()sys.exit(app.exec())