PyQt5渐变圆环水波进度条+透明淡入(多线程信号)

上效果:
100%
32%
![Desktop

| 导入模块

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
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值