Python 动态进度条实现,多个实例来展示实现方式

目录

1. 使用 print 函数

2. 使用 tqdm 库

3. 自定义样式

4. 多进度条

5. 嵌套进度条

6. 更新频率控制

7. 动态描述

8. 自定义回调

9. 使用 click 库

10. 使用 rich 库

文末福利


文末赠免费精品编程资料~~

在编写Python脚本时,特别是在处理长时间运行的任务或者循环迭代的过程中,向用户展示任务的执行进度是非常重要的。进度条不仅能够提高用户体验,还能让用户对程序的运行情况有一个直观的了解。这篇文章将会介绍如何在Python中实现动态进度条,并通过多个实例来展示其实现方

1. 使用 print 函数

最简单的方式是直接使用print函数来更新进度条的状态。

示例代码 1:

import timedef progress_bar(n, total, bar_length=20):    percent = float(n) / total    arrow = '-' * int(round(percent * bar_length) - 1) + '>'    spaces = ' ' * (bar_length - len(arrow))    print(f'Progress: [{arrow}{spaces}] {int(round(percent * 100))}%', end='\r')total = 50for i in range(total):    time.sleep(0.1)  # 模拟耗时操作    progress_bar(i + 1, total)print()  # 打印换行

输出结果:

Progress: [--------------------->] 100%

2. 使用 tqdm 库

tqdm 是一个非常流行的进度条库,它能够轻松地为循环添加进度条。

示例代码 2:

from tqdm import tqdmimport timetotal = 50for i in tqdm(range(total), desc="Processing"):    time.sleep(0.1)  # 模拟耗时操作

输出结果:

Processing: 100%|██████████| 50/50 [00:05<00:00,  9.82it/s]

3. 自定义样式

tqdm 支持自定义样式,比如颜色和字符。

示例代码 3:

from tqdm import tqdmimport timetotal = 50for i in tqdm(range(total), desc="Processing", bar_format="{desc}: {n_fmt}/{total_fmt} [{elapsed}<{remaining}, {rate_fmt}{postfix}]"):    time.sleep(0.1)  # 模拟耗时操作

输出结果:

Processing: 50/50 [00:05<00:00,  9.82it/s]

4. 多进度条

有时候我们需要同时跟踪多个进度条。

示例代码 4:

from tqdm import tqdmimport timewith tqdm(total=100, desc="First") as pbar1, tqdm(total=100, desc="Second") as pbar2:    for i in range(100):        time.sleep(0.05)        pbar1.update(1)        pbar2.update(1)

输出结果:

First: 100%|██████████| 100/100 [00:05<00:00, 19.31it/s]Second: 100%|██████████| 100/100 [00:05<00:00, 19.31it/s]

5. 嵌套进度条

当你的任务是分层结构时,嵌套进度条会很有用。

示例代码 5:​​​​​​

from tqdm import tqdmimport timeouter = tqdm(total=100, desc="Outer Loop")for i in outer:    inner = tqdm(total=100, desc="Inner Loop", leave=False)    for j in inner:        time.sleep(0.01)        inner.update(1)    outer.update(1)    inner.close()outer.close()

输出结果:

Outer Loop: 100%|██████████| 100/100 [00:10<00:00,  9.78it/s]

6. 更新频率控制

有时你需要控制进度条的更新频率。

示例代码 6:

from tqdm import tqdmimport timetotal = 50for i in tqdm(range(total), desc="Processing", mininterval=0.5):    time.sleep(0.1)  # 模拟耗时操作

输出结果:

Processing: 100%|██████████| 50/50 [00:05<00:00,  9.82it/s]

7. 动态描述

在循环中更新描述文本。

示例代码 7:

from tqdm import tqdmimport timetotal = 50with tqdm(total=total, desc="Starting") as pbar:    for i in range(total):        time.sleep(0.1)  # 模拟耗时操作        pbar.set_description(f"Processing {i+1}")        pbar.update(1)

输出结果:

Processing 50: 100%|██████████| 50/50 [00:05<00:00,  9.82it/s]

8. 自定义回调

可以定义一个回调函数来处理进度条的更新。

示例代码 8:​​​​​​​

from tqdm import tqdmimport timedef update_progress(progress):    print(f"Progress: {progress}% completed.", end="\r")total = 50for i in range(total):    time.sleep(0.1)  # 模拟耗时操作    update_progress(int((i + 1) / total * 100))print()  # 打印换行

输出结果:

Progress: 100% completed.

9. 使用 click 库

click 是一个用于构建命令行界面的库,也可以用来显示进度条。

示例代码 9:​​​​​​​

import clickimport timetotal = 50with click.progressbar(range(total), label='Processing') as bar:    for i in bar:        time.sleep(0.1)  # 模拟耗时操作

输出结果:

Processing 50/50 [100%]

10. 使用 rich 库

rich 是一个强大的库,可以创建美观的终端输出,包括进度条。

示例代码 10:

​​​​​​​

from rich.progress import trackimport timetotal = 50for i in track(range(total), description="Processing..."):    time.sleep(0.1)  # 模拟耗时操作

输出结果:

Processing... 100% 50/50 [00:05<00:00,  9.82it/s]

通过上述示例,你可以看到不同的方法来实现动态进度条。选择合适的方法取决于你的具体需求和场景。希望这些示例能帮助你在实际项目中有效地使用进度条功能!

文末福利

最后这里免费分享给大家一份Python全套学习资料,希望能帮到那些不满现状,想提升自己却又没有方向的朋友,也可以和我一起来学习交流呀。

包含编程资料、学习路线图、源代码、软件安装包等!【点击这里】领取!

Python所有方向的学习路线图,清楚各个方向要学什么东西
100多节Python课程视频,涵盖必备基础、爬虫和数据分析
100多个Python实战案例,学习不再是只会理论
华为出品独家Python漫画教程,手机也能学习

也可以扫描下方CSDNA官方认证二维码领取【保证100%免费

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是多线程 QProgressBar 实现进度条的示例代码: ```python from PyQt5.QtCore import QThread, pyqtSignal from PyQt5.QtWidgets import QApplication, QWidget, QProgressBar, QPushButton, QVBoxLayout import time class Worker(QThread): progress_updated = pyqtSignal(int) def run(self): for i in range(101): time.sleep(0.1) self.progress_updated.emit(i) class MainWindow(QWidget): def __init__(self): super().__init__() self.progress_bar = QProgressBar() self.start_button = QPushButton("Start") self.start_button.clicked.connect(self.start_worker) layout = QVBoxLayout() layout.addWidget(self.progress_bar) layout.addWidget(self.start_button) self.setLayout(layout) self.worker = Worker() self.worker.progress_updated.connect(self.update_progress) def start_worker(self): self.worker.start() def update_progress(self, value): self.progress_bar.setValue(value) if __name__ == "__main__": app = QApplication([]) main_window = MainWindow() main_window.show() app.exec_() ``` 在这个示例中,我们创建了一个 `Worker` 类,它继承自 `QThread` 类。在 `Worker` 类中,我们定义了一个 `progress_updated` 信号,用于在进度更新时发射信号。在 `run` 方法中,我们使用一个循环模拟了一个长时间的任务,并且在每次循环中都让线程休眠了一小段时间。在循环中,我们发射了 `progress_updated` 信号,并且将当前进度作为参数传递。 在 `MainWindow` 类中,我们创建了一个 `QProgressBar` 控件和一个 `QPushButton` 控件,用于启动线程。当用户点击 `Start` 按钮时,我们启动了 `Worker` 线程。我们还定义了一个 `update_progress` 方法,用于更新进度条的值。在 `MainWindow` 类的构造函数中,我们连接了 `Worker` 的 `progress_updated` 信号到 `update_progress` 方法。 最后,我们创建了一个 `QApplication` 实例,并且创建了一个 `MainWindow` 实例并显示。当用户关闭窗口时,`app.exec_()` 方法会返回并退出应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值