千家信息网

Python编程如何使用PyQt5库实现动态水波进度条

发表于:2025-11-10 作者:千家信息网编辑
千家信息网最后更新 2025年11月10日,这篇文章主要介绍"Python编程如何使用PyQt5库实现动态水波进度条",在日常操作中,相信很多人在Python编程如何使用PyQt5库实现动态水波进度条问题上存在疑惑,小编查阅了各式资料,整理出简
千家信息网最后更新 2025年11月10日Python编程如何使用PyQt5库实现动态水波进度条

这篇文章主要介绍"Python编程如何使用PyQt5库实现动态水波进度条",在日常操作中,相信很多人在Python编程如何使用PyQt5库实现动态水波进度条问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Python编程如何使用PyQt5库实现动态水波进度条"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

目录
  • 原理介绍

  • 代码实操

原理介绍

如果仔细观察的话,静态图效果的呈现在于先后的两个线条的绘制,产生水波的主要是由于两线条的左右的水平错位 以及 设置的透明度不同 所造成的;

想要形成最后的水波荡漾的视觉效果,只需要把数张线条连续走向的静态图拼接在一起就能达到

线条中的波浪效果,这里用到的是 正弦函数的走向,教程代码中的两根线条主要借助于

y = Asin(wx+l)+k 函数 绘制

y = Asin(wx+l)+k 函数中

两个线条就能实现交叉起伏的效果,是因为两正弦函数中设置的 l 值不一样 ,

基本原理讲解完了,下面就是代码实现部分,图像呈现效果是由 Qt中的 QPellete(画板) 实现,图像中的线条区域主要用到了 QPainterPath() 函数,函数可以借助绘制的线条围城一个区域

动态图效果的实现主要是在代码中加入了一个 startTimer() 函数,起到计时器效果:每隔一定的时间就会更新一次界面(所得到的静态图也不一样,这个静态图的视觉差实现动态效果);

而图像中百分比自动填充是由于在页面更新的时候,同时进度加一;

代码实操

函数初始化 : 定义背景颜色、进度条颜色、进度条起始进度及页面刷新时间等

self.resize(200,60)        self.layout = QGridLayout(self)        #背景填充灰色        self.setAutoFillBackground(True)        p  = QPalette()        p.setColor(QPalette.Background,Qt.gray)        self.setPalette(p)        #设置进度条颜色        self.bg_color = QColor(255, 0, 0)        #设置界面刷新时间        self.startTimer(80)        self.m_waterOffset = 0.05        self.m_offset = 50        self.m_borderwidth = 10        #进度条进度范围0-100        self.per_num = 0

painEvent 函数主要完成水波效果和进度条文本的绘制,也是效果绘制的核心

def paintEvent(self, event):        # 锯齿状绘画板;        painter = QPainter()        painter.setRenderHint(QPainter.Antialiasing)        painter.begin(self)        #获取窗口的宽度和高度        width,height = self.width(),self.height()        percentage = 1 - self.per_num/100        # 水波走向:正弦函数 y = A(wx+l) + k        # w 表示 周期,值越大密度越大        w = 2 * math.pi / (width)        # A 表示振幅 ,理解为水波的上下振幅        A = height * self.m_waterOffset        # k 表示 y 的偏移量,可理解为进度        k = height *percentage        water1 = QPainterPath()        water2 = QPainterPath()        #起始点        water1.moveTo(5,height)        water2.moveTo(5,height)        self.m_offset += 0.6       if(self.m_offset >(width/2)):            self.m_offset = 0        i = 5        while(i < width-5):            waterY1 = A*math.sin(w*i +self.m_offset ) + k            waterY2 = A*math.sin(w*i + self.m_offset + width/2*w) + k            water1.lineTo(i, waterY1)            water2.lineTo(i, waterY2)            i += 1        water1.lineTo(width-5,height)        water2.lineTo(width-5,height)        totalpath = QPainterPath()        totalpath.addRect(QRectF(5, 5, self.width() - 10, self.height() - 10))        painter.setBrush(Qt.gray)        painter.drawRect(self.rect())        painter.save()        painter.setPen(Qt.NoPen)        #设置水波的透明度        watercolor1 =QColor(self.bg_color)        watercolor1.setAlpha(100)        watercolor2 = QColor(self.bg_color)        watercolor2.setAlpha(150)        path = totalpath.intersected(water1)        painter.setBrush(watercolor1)        painter.drawPath(path)        path = totalpath.intersected(water2)        painter.setBrush(watercolor2)        painter.drawPath(path)        painter.restore()        '''绘制字体'''        m_font = QFont()        m_font.setFamily('Microsoft YaHei')        m_font.setPixelSize(int(self.width()/10))        painter.setPen(Qt.white)        painter.setFont(m_font)        painter.drawText(self.rect(),Qt.AlignCenter,"{}%".format(self.per_num))        painter.end()

实现进度条进度自动增加功能,同时界面实时更新达到动态效果

def timerEvent(self, event):        self.per_num +=1        if self.per_num ==101:            self.per_num = 0        self.update()

到此,关于"Python编程如何使用PyQt5库实现动态水波进度条"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

进度 效果 水波 函数 线条 动态 代码 编程 静态 学习 原理 图像 时间 正弦 界面 颜色 更新 两个 区域 同时 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 单片机软件开发是什么 服务器管理多个浏览器 软件开发公司管理制度大全 滨州电商软件开发哪家靠谱 电视台开展网络安全等级保护工作 东营软件开发咨询 服务器卡的没法重启怎么办 安卓设置代理服务器 浙江java软件开发计划 应用软件开发日志 海南百美网络技术控股有限公司 中国中铁网络安全宣传周知 网络安全管理软件意义 魔兽一个服务器最多创建几个号 服务器一直显示英文怎么办 有家互联网科技 软件开发与结构设计有相通性吗 吃鸡无法连接到服务器 品牌营销数据库 茂名数据链软件开发费用是多少 如何在前台修改数据库信息 信息科技有限公司互联网广告 武汉华盛荣网络技术 数据库怎么复制到另一个电脑上 服务器存储设备英语怎么写 关系数据库规范化题目 cs不在安全服务器上 如何查数据库备份文件的版本 数据库接入得数据量统计 ftp开发服务器安全吗
0