python实现进度条
编程要点
# system.out是标准输出流,标准输出流是终端窗口,与python的print函数有一定的关联
# print(obj)实质就是调用sys.stdout.write(obj+'\n')
import sys
# 打印‘人生苦短,我用python’,并换行
print('人生苦短,我用python')
# write()参数最后加上'\n'时,与上一句print的换行效果是等价的
sys.stdout.write('人生苦短,我用python'+'\n')
# sys.stdout.write()要先将打印的内容放到缓冲区中,当缓冲区满了或程序结束才会输出
# 并不能立即将要打印的内容输出到终端,
# 如果需要强制输出到终端,可以使用sys.stdout.flush()语句刷新缓冲区,实现立即打印
编程实现
# -*- coding:utf-8 -*-
# author:wanglisha
# 显示一个进度条,并在进度条右端显示进度百分比
import sys
from time import sleep
# 定义一个进度条类,对进度条的属性和功能进行封装
class ProgressBar(object):
# 初始化函数,设置进度条的总长度,最初长度,组成进度条的字符 (默认为█)
def __init__(self, len, bar_char='█'):
# 初始化进度条的总长度
self.total_len = len
# 设置组成进度条的字符
self.bar_char = bar_char
# 设置进度条起始长度为0
self.cur_len = 0
# 把终端输出sys.stdout 对象赋值给 self.write_direction
self.write_direction = sys.stdout
# 如果未给进度条总长度赋值,直接退出
if not self.total_len:
return
# 设置vstr为45个‘-’
vstr = '-'*45
# 在终端上打印出相关信息
self.write_direction.write('\n'+vstr+'进度条演示'+vstr)
# 显示进度条函数,show_len是进度条最新长度
def show(self, show_len):
# 如果进度条最新长度大于进度条总长度,设置进度百分比100
if show_len > self.total_len:
percent_int = 100
else:
# python语法中‘/’是正常除法,返回的是浮点类型的商
# ‘//’返回的是整数类型的商,可以理解为获取商的整数部分
# 以下语句取得进度条最新长度与进度条总长度的百分比的整数值
percent_int = (show_len*100) // self.total_len
# 要显示进度条,这个进度条由percent_int个self.bar_char(进度条字符)组成
cur_string = ("%s"%(self.bar_char))*percent_int
# 进度条与后面要显示的百分比之间的内容,由(100-percent_int)个空格组成
blank = ' '*(100 - percent_int)
# 通过sys.stdout对象的write()函数向终端写入内容(内容暂时存在内存里)
# 其中'\r'表示从当前开头重新覆盖地写
self.write_direction.write('\r'+cur_string+blank+str(percent_int)+'%')
# 通过flush()函数将内存的内容写到终端上
self.write_direction.flush()
# 将传入的进度条长度保存在self.cur_len中
self.cur_len = show_len
# 如果长度达到总长度,传入回车字符进行换行
if percent_int == 100:
self.write_direction.write('\n')
# 处理进度条每次增加长度的函数,new_len是每次增加的长度
def add_bar_len(self,new_len):
# 将进度条当前长度增加new_len
self.cur_len = self.cur_len + new_len
# 显示进度条
self.show(self.cur_len)
if __name__ == '__main__':
# 进度条演示
print('\n******************************************进度条演示*****************************************************')
# 实例化进度条类,生成进度条对象,并设置总长度为200
progressbar_obj = ProgressBar(len = 200)
# 循环20次,每增加10,完成循环后,长度正好为200
for i in range(20):
sleep(0.6)
# 每次增加长度10
progressbar_obj.add_bar_len(10)
打包成exe
使用pyinstaller库,将python编程实现进度条的.py文件,打包成.exe文件,exe文件可直接发送给没有安装python的小伙伴直接使用。
步骤1:本地安装pyinstall库
pip install pyinstaller
步骤2:准备一个ico文件作为exe文件的图标
这里直接从网上搜索
步骤3:将ico和py文件放在本地目录下
注意,放的目录不要带中文,以免出现奇奇怪怪的现象
步骤4:cmd进入当前目录后,执行如下命令
pyinstaller -F -i XX.ico XXX.py
执行完毕,在当前文件中自动生成dist文件夹,想要的exe就在这个文件夹中
实际举例
生成一个setup.exe:
双击后显示进度条界面