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、效果展示


相关推荐
星夜离尘5619 分钟前
MATLAB阶跃响应怎么量:别把最后一个采样点当成稳态
开发语言·matlab
云水初32 分钟前
【agent篇】RAG Agent避坑指南(附高级RAG Agent汇总)
开发语言·笔记·python·学习·langchain·agent·rag
Littlehero_12134 分钟前
QT自定义控件之水泥厂组态(源码开源)
开发语言·qt
辛苦才能43 分钟前
C++ 哈希表深度解析:删除为什么必须打标记,负载因子为什么卡 0.7
开发语言·数据结构·c++·算法
miller-tsunami1 小时前
STL简介&string相关知识点
开发语言·c++·string
半摆烂日常2 小时前
手机表单的左滑操作:触摸事件的处理细节
大数据·开发语言·人工智能·智能手机·https·c#
星夜离尘562 小时前
MATLAB滑动RMS如何接报警:窗口未满和缺样不能当成正常
开发语言·matlab
开开心心就好2 小时前
白天晚上自动调蓝光,护眼工具亮度可调
服务器·开发语言·算法·pdf·ocr·intellij-idea·idea
张张123y2 小时前
后端第十一课:RAG 落地实战(从 0 到 1 接上私有知识库,并设计一个好用的 RAG)
开发语言·人工智能·python·机器学习·fastapi·rag
梅梅绵绵冰2 小时前
JVM虚拟机
java·开发语言·jvm