69 lines
1.8 KiB
Python
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)
|
|||
|
|
|||
|
# <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}%"
|
|||
|
)
|
|||
|
|