Python 小程序之动态进度条

2023-12-14 02:47:03

动态进度条



前言

大家在下载东西的时候都会看到有一个动态的进度条在那里。进度条走完了也就下载完了。下面我写一个简易版的动态进度条,希望能对大家有所启发。


一、显示效果

在这里插入图片描述大概就是这么回事儿,有那么一丝丝味儿吧?哈哈哈哈哈
很简单,大家往下看。

二、基本思路

1.引入库

代码如下:

import time

进度条计时用的。


2.基本参数

代码如下(示例):

# 进度条长度
scale = 100

# 开始时间
start_time = time.time()

首先要设置一下进度条长度,就像下载一个东西总得有大小,要不然没完没了。
然后开始计时,下面进度条开始走。


3.数据处理

代码如下(示例):

# 执行循环任务
for ....in.range:
    ..........    #数据处理

# 当循环完成后,添加新行以清除最后的进度条
print()
print(f'进度条走完共用时{int(elapsed_time)}秒')

数据处理大概就是这么个结构。
for循环结构会根据上面scale值进一步处理,最后走完了会另起一行打印一条消息告诉你用了多长时间。


三、数据处理

1.计算完成百分比

代码如下(示例):

# 执行循环任务
for i in range(scale + 1):
    # 计算完成百分比
    percent_complete = (i / scale) * 100
    #进度条中的#和空白的大小
    hashes = '#' * int(percent_complete)
    spaces = ' ' * (scale - len(hashes))

首先把进度条中主要元素的值都算出来。像 #、空格、百分比等。。。
然后下面进一步把它们打印出来。


2.动态显示进度条

代码如下(示例):

    # 组装并打印进度条
    print(f'\rProgress: [{hashes}{spaces}] {percent_complete:.0f}%', end='')

    # 添加一点延迟以观察进度条的变化
    time.sleep(0.1)

第一段中的 \r要注意:
\r 是一个转义序列,它表示回车(carriage return)。当 \r 被打印到终端时,光标会移动到当前行的开头,但不会换行。这意味着你可以用 \r 来覆盖同一行上的先前输出。

第二段代码的意思是:
让进度条每走一下停顿一下,这样才能看出来动态的效果。要不噌的一下完了没视觉效果。


3.打印完成时间

代码如下(示例):

# 当循环完成后,添加新行以清除最后的进度条
end_time = time.time()
elapsed_time = end_time - start_time
print()
print(f'进度条走完共用时{int(elapsed_time)}秒')

print():换行的效果。


总结

我个人感觉哈,这个跟我们平时看到的进度条原理大致是一样的。只不过区别是:

  1. 把静态输入改成了动态输入(下载文件大小);
  2. 进度条走的快慢由我设置的每次走1改成了已下载的流量大小;
  3. 把完成时间改成了剩余时间(剩余文件大小 / 当前网速)。

文章来源:https://blog.csdn.net/weixin_57061292/article/details/134937611
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。