LISHUZUOXUN_yangjiang/LSZXPagesLibrary/circular_synchronization.py

69 lines
1.8 KiB
Python

# 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}%"
)