上效果:
![Deskto
文章目录
| 导入模块
import sys from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidgets import * import math
| 效果
1.线程内修改界面
参考文章https://blog.csdn.net/avatarhhh/article/details/105540255
线程内修改, PyQt5提供了信号
PyQt5.QtCore.QThread
class ProgressThread(QThread):
signal = pyqtSignal()
def run(self):
for p in range(100):
self.signal.emit()
self.msleep(100)
其实,如果不是准时设置, 你也可以不重写run函数, 直接调用signal.emit
方法即可
2. 窗口淡入(淡出)
参考文章https://blog.csdn.net/weixin_52132159/article/details/122549237…
直接写了个方法, 直接调用即可, anim类要绑定或保存在一个全局或类变量中, 在单独的函数结束中anim会直接执行__del__()方法
def Animation(parent, type=b"windowOpacity", from_value=0, to_value=1, ms=1000, connect=None):
anim = QPropertyAnimation(parent, type)
anim.setDuration(ms)
anim.setStartValue(from_value)
anim.setEndValue(to_value)
if connect:
anim.finished.connect(connect)
anim.start()
return anim
3.窗口去边框
self.setWindowFlags(Qt.FramelessWindowHint) # 去边框
4.透明
self.setAttribute(Qt.WA_TranslucentBackground) # 设置窗口背景透明
5.圆环进度条实现
注意!!! ShareTechMomo不是本机字体(放上Consolas可以),自行下载!
参考文章,在此基础上添加了不少东西https://blog.csdn.net/weixin_41611054/article/details/103660845
class RoundProgress(QWidget):
m_waterOffset = 0.05
m_offset = 50
bg_color = QColor(255, 0, 0)
fsize = 10
def __init__(self, t, parent=None):
super(RoundProgress, self).__init__(parent)
self.resize(*t)
self.size = t
self.setWindowFlags(Qt.FramelessWindowHint) # 去边框
self.setAttribute(Qt.WA_TranslucentBackground) # 设置窗口背景透明
self.percent = 0
self.pen = QPen()
gradient = QConicalGradient(50, 50, 91)
gradient.setColorAt(0, QColor(255, 10, 10))
gradient.setColorAt(1, QColor(255, 201 ,14))
#gradient.setColorAt(0.5, QColor(255, 201 ,14))
self.pen.setBrush(gradient) # 设置画刷渐变效果
self.pen.setWidth(8)
self.pen.setCapStyle(Qt.RoundCap)
self.font = QFont()
self.font.setFamily("Consolas") #Share-TechMono
self.font.setPointSize(self.size[0] // 4)
def paintEvent(self, event):
width, height = self.size
rect = QRectF(self.fsize, self.fsize, width-self.fsize*2, height-self.fsize*2)
painter = QPainter(self)
rotateAngle = 360 * self.percent / 100
# 绘制准备工作,启用反锯齿
painter.setRenderHints(QPainter.Antialiasing)
painter.setPen(self.pen)
painter.drawArc(rect, (90 - 0) * 16, -rotateAngle * 16) # 画圆环
painter.setFont(self.font)
painter.setPen(QColor(153 - 1.53*self.percent ,
217-0.55*self.percent,
234-0.02