如何用Python写个文本进度条?

举报
小Bob来啦 发表于 2021/10/24 23:26:17 2021/10/24
【摘要】 昨天我们学到了Python中Time库的使用,今天就可以开始用Time库完成进度条的操作啦!进度条-反映某一事件的运行状态文本进度条:采用字符串方式打印可以动态变化的文本进度条,且在一行中能够逐渐变化。其实学过进度条的就知道进度条其实只是一个模拟化的持续进程,但也在一定程度上能够反映运行的一个进度情况。在这里我们需要用到Time库中的sleep函数,用它来模拟持续化进程。比如下面这段代码就演...

昨天我们学到了Python中Time库的使用,今天就可以开始用Time库完成进度条的操作啦!

进度条-反映某一事件的运行状态

文本进度条:采用字符串方式打印可以动态变化的文本进度条,且在一行中能够逐渐变化。

其实学过进度条的就知道进度条其实只是一个模拟化的持续进程,但也在一定程度上能够反映运行的一个进度情况。

在这里我们需要用到Time库中的sleep函数,用它来模拟持续化进程。

比如下面这段代码就演示了一个简单的进度条实例:

import time  #调用Time库
scale = 10   #定义文本进度条大概的宽度为10
print("------执行开始------")
for i in range(scale+1):    #引入一个for循环
    a='*'*i                 #动态变化的*
    b='.'*(scale-i)         #动态变化的.
    c=(i/scale)*100  #输出进度条的百分比
    print("{:^3.0f}%[{}-{}]".format(c,a,b))
    time.sleep(0.1)
print("------执行结束------")


运行结果:

图片

上面提到的是简单的文本进度条,其实用得更多还是单行动态刷新的文本进度条,即会在显示文本进度条时即时刷新——用后打印的字符信息覆盖之前打印的信息。

  1. 单行动态刷新的关键是\r。

  2. 刷新的本质是用后打印的字符覆盖之前的字符;

  3. 且不能换行:在用print时控制输出;

  4. 要能回退:打印后光标退回到之前的位置\r。


初始版本如下:

import time
for i in range(101):
    print("\r{:3}%".format(i),end=" ")  #\r让光标返回到行首;end=" "让光标不进行换行操作
    time.sleep(0.1)

运行结果(两张为连续变化):

图片

图片

最终版本:

import time
scale = 50
print("执行开始".center(scale//2,"-"))
start=time.perf_counter()  #记录打印开始的时间
for i in range(scale+1):
    a='*'*i
    b='.'*(scale-i)
    c=(i/scale)*100
    dur=time.perf_counter()-start
    print("\r{:^3.0f}%[{}-{}]{:.2f}s".format(c,a,b,dur),end=' ')
    #增加了dur变量,用来记录打印文本进度条所消耗的时间。
    time.sleep(0.1)
print("\n"+"执行结束".center(scale//2,'-'))

运行结果(两张为连续变化):

图片

图片



未完待续...

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。