PyQt QtWaitingSpinner详解-为你的 Qt 程序带来丝滑等待动画

PyQt QtWaitingSpinner详解-为你的 Qt 程序带来丝滑等待动画

一、PyQt QtWaitingSpinner详解

QtWaitingSpinner 是一个用于显示加载状态的第三方动画控件,常用于异步操作等待场景。它不是 PyQt 官方组件,但被广泛集成到项目中。

1、核心特性

  1. 动画效果

    实现旋转式加载动画,支持自定义:

    • 旋转速度(转速)
    • 线条数量
    • 线条长度/宽度
    • 颜色透明度渐变
  2. 主要属性

    python 复制代码
    spinner = QtWaitingSpinner(parent)
    spinner.setRoundness(70.0)          # 圆度系数 [0.0, 100.0]
    spinner.setMinimumTrailOpacity(15.0) # 最小透明度
    spinner.setTrailFadePercentage(70.0) # 渐变百分比
    spinner.setNumberOfLines(12)        # 旋转线条数
    spinner.setLineLength(10)           # 线条长度(像素)
    spinner.setLineWidth(5)             # 线条宽度(像素)
    spinner.setInnerRadius(10)          # 内圆半径
    spinner.setRevolutionsPerSecond(1)  # 每秒转数
    spinner.setColor(QColor(61, 174, 233)) # 主色调

2、基础使用示例

python 复制代码
from PyQt5.QtWidgets import QApplication, QMainWindow
from waitingspinner import QtWaitingSpinner  # 需单独导入

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        
        # 创建等待动画
        self.spinner = QtWaitingSpinner(self)
        self.spinner.setInnerRadius(15)
        self.spinner.setLineWidth(3)
        self.spinner.setNumberOfLines(8)
        self.spinner.resize(100, 100)
        self.spinner.move(150, 150)
        
        # 控制方法
        self.spinner.start()  # 开始旋转
        # self.spinner.stop()  # 停止旋转
        # self.spinner.isSpinning()  # 检查状态

if __name__ == "__main__":
    app = QApplication([])
    window = MainWindow()
    window.show()
    app.exec_()

3、高级用法

  1. 集成到布局中

    python 复制代码
    layout = QVBoxLayout()
    layout.addWidget(QtWaitingSpinner())
  2. 动态控制

    python 复制代码
    # 启动任务时显示
    def start_task(self):
        self.spinner.start()
        QTimer.singleShot(3000, self.complete_task)  # 模拟耗时操作
    
    # 任务完成时隐藏
    def complete_task(self):
        self.spinner.stop()
  3. 样式定制

    python 复制代码
    spinner.setColor(QColor("#FF5733"))  # 自定义颜色
    spinner.setRevolutionsPerSecond(2)   # 加速旋转

4、安装方式

  1. 下载 waitingspinner.py 文件(GitHub 开源项目)

  2. 复制到项目目录

  3. 导入使用:

    python 复制代码
    from waitingspinner import QtWaitingSpinner

5、注意事项

  1. 确保在 GUI 主线程中控制启动/停止
  2. 动画开启时会持续占用少量 CPU 资源
  3. 推荐在以下场景使用:
    • 网络请求等待
    • 文件加载过程
    • 复杂计算等待期

该组件遵循 MIT 许可证,源码地址:
https://github.com/z3ntu/QtWaitingSpinner

二、使用方法

1、安装库

cpp 复制代码
pip install pyqtwaitingspinner    # 通用版本

2、测试源码

python 复制代码
import sys
from PyQt6.QtWidgets import QApplication, QMainWindow, QMessageBox, QToolBar
from PyQt6.QtGui import QAction, QKeySequence, QColor
from PyQt6.QtCore import Qt
from pyqtwaitingspinner import SpinnerParameters, SpinDirection, WaitingSpinner


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.resize(800,600)
        # 配置 SpinnerParameters
        params = SpinnerParameters(
            roundness=100.0,
            number_of_lines=8,
            line_length=40,
            line_width=40,
            inner_radius=60,
            revolutions_per_second=1.0,
            color=QColor(0, 170, 0),
            minimum_trail_opacity=1.0,
            trail_fade_percentage=67.0,
            spin_direction=SpinDirection.COUNTERCLOCKWISE,
            center_on_parent=True,
            disable_parent_when_spinning=False,
        )

        spinner = WaitingSpinner(self, params)
        spinner.start()



if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec())

3、效果展示


相关推荐
Highcharts.js9 小时前
教程:基于 React + Highcharts 构建一个单页应用程序、按需数据拉取与图表渲染
开发语言·前端·数据结构·react.js·前端框架·highcharts·页面应用
头发还在的女程序员11 小时前
医院陪诊管理系统怎么选择?——2026 年选型避坑与架构参考
java·开发语言·陪诊系统·陪诊app·医院陪诊陪护
爱写代码的小朋友13 小时前
从零开始学 Win32 API:C++ 窗口编程实战(VS Code + MinGW-w64 命令行详解)
开发语言·c++
果汁华13 小时前
Function Calling 与 Python 实战完整指南
开发语言·网络·python
小小晓.13 小时前
C++:语句和作用域
开发语言·c++
wanderist.14 小时前
Lambda表达式在算法竞赛中的应用
java·开发语言·算法
海天鹰15 小时前
PHP上传文件
android·开发语言·php
Yeauty16 小时前
渲染成图再 CLI 拼接,还是进程内直推?Rust 帧到视频的两条路
开发语言·rust·音视频
geovindu17 小时前
CSharp: Breadth First Search Algorithm and Depth First Search Algorithm
开发语言·后端·算法·c#·.net·搜索算法
库克克17 小时前
【C++】set 与multiset
开发语言·c++