【Python】IDLE中文本进度条的单行动态刷新无法实现分析

文本进度条需求分析

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

如何获得文本进度条的变化时间呢?我们采用sleep()模拟一个持续的进度

import time
scale=10
print("------执行开始------")
for i in range(scale+1):
	a='*'*i
	b='.'*(scale-i)
	c=(i/scale)*100
	print("{:^3.0f}%[{}->{}]".format(c,a,b))
print("------执行结束------")

代码分析及结果展示:
在这里插入图片描述
引入time库,使用time库的sleep函数来生成一个持续不断的时间,首先我们打印一行print执行开始,作为一个开始的标签,最后也打印一个结束的标签,为了让标签看起来整洁,我们在执行开始,执行结束的两侧增加了由减号构成的线条

我们定义一个变量scale=10,这个scale的含义是指我们的文本进度条的大概的宽度,为了能够模拟一个进度,我们使用for循环,我们的基本原理是定义一个休眠时间,每次循环它都会打印当前的进度状态,进行简单的休眠,休眠可以理解为计算机在完成某一个任务

循环中首先定义一个a,它等于字符“”与循环变量i的乘积,即a表示“”被复制的次数,来表示当前进度百分比所表达的信息,对于变量b我们表示当前剩余进度条百分比的信息,变量c我们计算出当前进度条的百分比数值,最后我们使用print函数设置三个槽,在每个槽中增加了百分比以及相应字符串。

文本进度条的单行动态刷新

刷新的本质就是用后打印的字符覆盖之前的字符,后者刷新前者就要求输出的信息不能换行到下一行,print()函数需要被控制,要求输出信息后不能换行,并且打印后光标退回到之前的位置\r

#TextProBar.py
import time
for i in range(101):
	print("\r{:3}%".format(i),end="")
	time.sleep(0.1)

我们在IDLE中运行这段代码发现,所有的进度信息都被输出,并没有实现刷新

这是因为IDLE本身它是一个编写程序的开发环境,它并不是程序运行的主要环境,我们正常运行程序要么通过双击来实现,要么通过控制台来运行,一般很少有直接通过IDLE来运行的,由于IDLE被设定为是开发环境,为了保证其中参数的运行效果,它们就把\r这个功能屏蔽掉了。

为了将这个程序正确运行,我们可以打开windows操作环境中命令行类似的相关工具,或者在Linux环境下打开B shell等一些文本的shell工具。

发布了20 篇原创文章 · 获赞 38 · 访问量 913

猜你喜欢

转载自blog.csdn.net/weixin_45506775/article/details/104261955
今日推荐