LISHUZUOXUN_yangjiang/LSZXPagesManagerLibrary/echarts_pie.py

81 lines
3.1 KiB
Python
Raw Normal View History

2024-09-23 14:54:15 +08:00
# coding: gb2312
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
class PieCircleWidget(QWidget):
def __init__(self):
super().__init__()
self.setFixedSize(360, 360)
# <20><><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
self.data_list = []
self.title = None
self.data = []
self.colors = [QColor("#ef6667"), QColor("#fac85d"), QColor("#91cd77"), QColor("#eb7ccc"), QColor("#73c0e0")]
self.texts = ["<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", "ȱ<EFBFBD><EFBFBD>"] # <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
def set_data(self, data, title):
self.data_list = data
self.title = title
for index, data in enumerate(self.data_list):
param = data / 100
self.data.append(param)
def paintEvent(self, event):
painter = QPainter(self)
painter.setRenderHint(QPainter.Antialiasing)
# <20><><EFBFBD>Ʊ<EFBFBD><C6B1><EFBFBD>
font = QFont("\"Microsoft YaHei UI\"", 14, QFont.Bold)
painter.setFont(font)
painter.setPen(Qt.black)
painter.drawText(20, 30, self.title)
# Բ<><D4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
center_x = self.width() / 2
center_y = self.height() / 2
# <20><>Բ<EFBFBD>
outer_radius = min(self.width(), self.height()) / 2 - 60
# <20><>Բ<EFBFBD><EFBFBD><EBBEB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Բ<EFBFBD><EFBFBD><EBBEB6> 70%<25><>
inner_radius = outer_radius * 0.7
start_angle = 0
for i, portion in enumerate(self.data):
painter.setPen(Qt.NoPen)
angle = 360 * portion
painter.setBrush(self.colors[i])
painter.drawPie(int(center_x - outer_radius), int(center_y - outer_radius), int(2 * outer_radius),
int(2 * outer_radius), int(start_angle * 16), int(angle * 16))
painter.setFont(QFont("\"Microsoft YaHei UI\"", 10))
painter.setPen(Qt.black) # <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫΪ<C9AB><CEAA>ɫ
start_angle += angle
painter.setPen(Qt.NoPen)
# <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Բ
painter.setBrush(Qt.white)
painter.drawEllipse(int(center_x - inner_radius), int(center_y - inner_radius),
int(2 * inner_radius), int(2 * inner_radius))
# <20><><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>ͼ<EFBFBD><CDBC>
legend_x = 60
legend_y = self.height() - 40 # <20><>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD>ڵײ<DAB5>
for i, label in enumerate(self.texts):
painter.setPen(Qt.NoPen)
painter.setBrush(self.colors[i])
# <20>ж<EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EEA3AC><EFBFBD><EFBFBD>λ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>Ҫ<EEA3AC><D2AA><EFBFBD><EFBFBD>Ųһ<C5B2><D2BB>λ<EFBFBD><CEBB>
if i == len(self.texts)-1:
painter.drawRect(int(legend_x + i * 53), legend_y, 15, 15) # <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD> 50 <20><><EFBFBD><EFBFBD>
painter.setFont(QFont("\"Microsoft YaHei UI\"", 10))
painter.setPen(Qt.black) # <20><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫΪ<C9AB><CEAA>ɫ
painter.drawText(int(legend_x + i * 50 + 32), legend_y + 12, label) # <20><><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>
else:
painter.drawRect(int(legend_x + i * 50), legend_y, 15, 15) # <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD> 50 <20><><EFBFBD><EFBFBD>
painter.setFont(QFont("\"Microsoft YaHei UI\"", 10))
painter.setPen(Qt.black) # <20><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫΪ<C9AB><CEAA>ɫ
painter.drawText(int(legend_x + i * 50 + 20), legend_y + 12, label) # <20><><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>