LISHUZUOXUN_yangjiang/LSZXPagesLibrary/circular_synchronization.py

69 lines
1.8 KiB
Python
Raw Normal View History

2024-09-23 14:54:15 +08:00
# 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)
# <20><><EFBFBD><EFBFBD>Բ<EFBFBD><D4B2>
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,
)
# <20><><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD>
pen.setColor(QColor(50, 150, 250))
painter.setPen(pen)
# <20><><EFBFBD>ٷֱ<D9B7>ת<EFBFBD><D7AA>Ϊ<EFBFBD>Ƕȣ<C7B6><C8A3><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
angle = int(-self.percentage * 16 * 3.6)
painter.drawArc(
self.width,
margin,
size - 2 * margin,
size - 2 * margin,
90 * 16,
angle,
)
# <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
painter.setFont(QFont('\"Microsoft YaHei UI\"', 18, 600)) # <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>СΪ 20px
painter.setPen(QPen(QColor(34, 34, 34))) # <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫΪ<C9AB><CEAA>ɫ
painter.drawText(
int(int(width / 2) - 100 + self.width),
int(height / 2) - 20,
200,
30,
Qt.AlignCenter,
f"{self.percentage}%"
)