Python实现单行刷新文本进度条与动态加载效果
本文详细介绍如何利用Python的time库实现单行刷新的文本进度条。通过解析\r转义字符实现光标回退覆盖,解决默认换行导致的显示混乱问题,并提供完整代码示例与动态时间统计功能,帮助开发者直观展示程序执行进度。
Python单行刷新进度条实现原理
本文将演示如何使用Python实现文本进度条、程序进度条及加载进度条的单行刷新功能,具体实现细节如下。
主要思路是利用time库模拟程序的执行过程,以此作为实例进行演示。
核心逻辑在于简单地打印出程序的当前进度状态。
实现单行刷新的关键在于使用\r转义字符。
Python默认的print函数会在输出后自动换行,因此添加\r可以使光标回退到当前行的起始位置,从而覆盖之前的输出内容。
import time
tm=10
print('{:-^18}'.format('开始'))
for i in range(tm+1):
a='#'*i
b='.'*(tm-i)
c=(i/tm)*100
print('\r{:^3.0f}%[{}->{}]'.format(c,a,b),end="")#记得要光标回退,这是python3的打法,python2的把最后的end=‘'改了就好
time.sleep(0.1)#这是模拟程序进程,可将time.sleep替换成程序进程
print('{:-^18}'.format('结束'))
如果不使用\r,效果将如所示,每一行进度都会独立显示,导致界面杂乱。
--------开始--------
0 %[->..........]
10 %[#->.........]
20 %[##->........]
30 %[###->.......]
40 %[####->......]
50 %[#####->.....]
60 %[######->....]
70 %[#######->...]
80 %[########->..]
90 %[#########->.]
100%[##########->]
--------结束--------
加入\r后的最终视觉效果如所示,进度条在同一行内动态更新。
--------开始-------- 100%[##########->]--------结束--------
由于最后一步输出中“结束”标签与进度条末尾重叠,因此需要额外添加一个换行符来优化显示,最后一行代码应修改为。
print('\n'+'{:-^18}'.format('结束'))
接下来,我们将进一步探讨如何使用Python实现单行动态刷新的文本进度条。
相关代码文件名为TextProBar.py。
动态时间统计进度条代码示例
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 = "")
time.sleep(0.1)
print("\n"+"执行结束".center(scale // 2,"-"))
\r转义字符的作用是使打印后的光标退回到之前的位置以覆盖旧字符,但在IDLE环境中该效果会被屏蔽。因此,建议使用命令行执行。需要注意的是,IDLE作为开发环境,为了保证参数运行效果的稳定性,屏蔽了部分显示特性;而正常运行程序通常通过双击文件或控制台进行,较少直接通过IDLE运行。
本文对上述Python实现文本进度条、程序进度条、加载进度条及单行刷新功能进行了总结。
希望以上内容能对大家有所帮助。如有任何疑问,欢迎留言,小编会及时回复。感谢大家对本站的支持!如果您觉得本文对您有帮助,欢迎转载,请注明出处,谢谢!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









