# coding: gb2312 import sys from PyQt5.QtCore import Qt from PyQt5.QtGui import QPainter, QColor, QFont, QPen from PyQt5.QtWidgets import * class CircularProgressSynchronization(QWidget): def __init__(self): super().__init__() self.percentage = 0 self.screenRect = QDesktopWidget().availableGeometry() self.width = int(self.screenRect.width() * 0.1) def set_data(self, percentage=None): if percentage >= 0: self.percentage = percentage def paintEvent(self, event): width, height = 250, 250 self.setMinimumSize(width, height) size = min(width, height) margin = 10 bar_width = 12 painter = QPainter(self) painter.setRenderHint(QPainter.Antialiasing) # 绘制圆形 pen = QPen(QColor(235, 238, 245)) pen.setWidth(bar_width) painter.setPen(pen) painter.drawArc( self.width, margin, size - 2 * margin, size - 2 * margin, 0, 360 * 16, ) # 绘制进度 pen.setColor(QColor(50, 150, 250)) painter.setPen(pen) # 将百分比转换为角度,并确保结果为整数 angle = int(-self.percentage * 16 * 3.6) painter.drawArc( self.width, margin, size - 2 * margin, size - 2 * margin, 90 * 16, angle, ) # 绘制文字 painter.setFont(QFont('\"Microsoft YaHei UI\"', 18, 600)) # 设置姓名的字体大小为 20px painter.setPen(QPen(QColor(34, 34, 34))) # 设置姓名的颜色为红色 painter.drawText( int(int(width / 2) - 100 + self.width), int(height / 2) - 20, 200, 30, Qt.AlignCenter, f"{self.percentage}%" )