81 lines
3.1 KiB
Python
81 lines
3.1 KiB
Python
|
# 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>
|