[Python]自定义进度条

展示效果

 |过程|

  |运行中|

#Working...|=□----| 1/3 (33%) 1 to go
#Working...|===□--| 2/3 (67%) 1 to go

  |运行完成|

# Finish!!!|=====□| 3/3 (100%)

定义过程

 1. 调用相关函数

import time
import sys

 2. 定义单个进度条展示函数

   ①定义函数名
# 获取单个进度条
def get_progress_bar(content, current_progress, overall_progress, size=1, stylelist=["=", "□", "-"]):
  # 参数
  # content:内容
  # current_progress:已过长度,当前位置
  # overall_progress:总长度
  # size:单个字符宽度
  # (默认为1个字符长度)
  # stylelist:[已经过的字符,当前字符,还没过的字符]
  # (每个空最好为1个字符的宽度)
  # 默认为["=","□","-"]
   ② 定义计算部分
   # 剩余长度
   remaining_progress = overall_progress-current_progress
   # 已过字符长度,样式
   current_length = int(current_progress*size-1)*stylelist[0]
   # 当前字符样式
   current_location = stylelist[1]
   # 未过字符长度,样式
   remaining_length = int(remaining_progress*size)*stylelist[2]
   # 百分比
   percentage = int((current_progress/overall_progress)*100)
   ③ 定义两种样式
    # 运行时状态
    string = "Working... {0} |{1}{2}{3}| {4}/{5} ({6}%) {7} to go"
    string = string.format(content, current_length, current_location, remaining_length,
                           current_progress, overall_progress, percentage, remaining_progress)
    # 结束时状态
    string1 = " Finish!!! {0} |{1}{2}| {5}/{5} (100%)"
    string1 = string1.format(content, current_length, current_location, remaining_length,
                             current_progress, overall_progress, percentage, remaining_progress)
   ④检测是否完成,做出相应调整
    # 如果百分比为100,也就是完成
    if percentage == 100:
        # 检测相差字符长度,并且加上10进行保底
        difference_space = len(string) - len(string1) + 10
        # 设置要返回的字符串
        string = string1 + difference_space * " "
   ⑤返回结果
    # 返回结果
    return (string)
   代码段
# 获取单个进度条
def get_progress_bar(content, current_progress, overall_progress, size=1, stylelist=["=", "□", "-"]):
    # 参数
    # content:内容
    # current_progress:已过长度,当前位置
    # overall_progress:总长度
    # size:单个字符宽度
    # (默认为1个字符长度)
    # stylelist:[已经过的字符,当前字符,还没过的字符]
    # (每个空最好为1个字符的宽度)
    # 默认为["=","□","-"]

    # 计算
    # 剩余长度
    remaining_progress = overall_progress-current_progress
    # 已过字符长度,样式
    current_length = int(current_progress*size-1)*stylelist[0]
    # 当前字符样式
    current_location = stylelist[1]
    # 未过字符长度,样式
    remaining_length = int(remaining_progress*size)*stylelist[2]
    # 百分比
    percentage = int((current_progress/overall_progress)*100)
    
    # 状态
    # 运行时状态
    string = "Working... {0} |{1}{2}{3}| {4}/{5} ({6}%) {7} to go"
    string = string.format(content, current_length, current_location, remaining_length,
                           current_progress, overall_progress, percentage, remaining_progress)
    # 结束时状态
    string1 = " Finish!!! {0} |{1}{2}| {5}/{5} (100%)"
    string1 = string1.format(content, current_length, current_location, remaining_length,
                             current_progress, overall_progress, percentage, remaining_progress)
    
    # 是否完成
    # 如果百分比为100,也就是完成
    if percentage == 100:
        # 检测相差字符长度,并且加上10进行保底
        difference_space = len(string) - len(string1) + 10
        # 设置要返回的字符串
        string = string1 + difference_space * " "
    # 返回结果
    return (string)

 3. 定义完整进度条展示函数

   ①定义函数名
# 获取完整进度条
def get_progress_bar(
    content,
    current_progress,
    overall_progress,
    size=1,
    stylelist=["=","□","-"]
   ):
  # 参数
  # content:内容
  # current_progress:已过长度,当前位置
  # overall_progress:总长度
  # size:单个字符宽度
  # (默认为1个字符长度)
  # stylelist:[已经过的字符,当前字符,还没过的字符]
  # (每个空最好为1个字符的宽度)
  # (默认为["=","□","-"])
   ②获取一个列表(从1至count+1)
	# 获取一个列表(从1至count+1)
    it = range(1,count+1)
   ③打印为0时的状况
    # 打印为0时的状况
    text = get_progress_bar(prefix, 0, count, size, [stylelist[2], stylelist[2], stylelist[2]])
    file.write("\r"+text)
   ④打印不为0时的状况
    # 打印不为0时的情况
    for item in it:
        time.sleep(times)
        text = get_progress_bar(prefix, item, count, size, stylelist)
        file.write("\r"+text)
   ⑤打印结束后换行
    # 打印结束后换行
    file.write("\n")
   代码段
# 获取完整进度条
def progressbar(count, prefix="", times=0.2, size=1, stylelist=["=", "□", "-"], file=sys.stdout):
    # 参数
    # count:总长度
    # prefix:内容
    # times:间隔时间
    # (默认为0.2秒)
    # size:单个字符宽度
    # (默认为1个字符长度)
    # stylelist:[已经过的字符,当前字符,还没过的字符]
    # (每个空最好为1个字符的宽度)
    # (默认为["=","□","-"])
    # file:不赘述了(默认值为sys.stdout)

    # 获取一个列表(从1至count+1)
    it = range(1,count+1)

    # 打印为0时的状况
    text = get_progress_bar(prefix, 0, count, size, [stylelist[2], stylelist[2], stylelist[2]])
    file.write("\r"+text)
    
    # 打印不为0时的情况
    for item in it:
        time.sleep(times)
        text = get_progress_bar(prefix, item, count, size, stylelist)
        file.write("\r"+text)
    
    # 打印结束后换行
    file.write("\n")

 4. 调用运行函数

if __name__ == "__main__":
    # 调用运行函数
    progressbar(count=3, times=0.5, size=2)

完整代码

import time
import sys

# 获取单个进度条
def get_progress_bar(content, current_progress, overall_progress, size=1, stylelist=["=", "□", "-"]):
    # 参数
    # content:内容
    # current_progress:已过长度,当前位置
    # overall_progress:总长度
    # size:单个字符宽度
    # (默认为1个字符长度)
    # stylelist:[已经过的字符,当前字符,还没过的字符]
    # (每个空最好为1个字符的宽度)
    # 默认为["=","□","-"]

    # 计算
    # 剩余长度
    remaining_progress = overall_progress-current_progress
    # 已过字符长度,样式
    current_length = int(current_progress*size-1)*stylelist[0]
    # 当前字符样式
    current_location = stylelist[1]
    # 未过字符长度,样式
    remaining_length = int(remaining_progress*size)*stylelist[2]
    # 百分比
    percentage = int((current_progress/overall_progress)*100)
    
    # 状态
    # 运行时状态
    string = "Working... {0} |{1}{2}{3}| {4}/{5} ({6}%) {7} to go"
    string = string.format(content, current_length, current_location, remaining_length,
                           current_progress, overall_progress, percentage, remaining_progress)
    # 结束时状态
    string1 = " Finish!!! {0} |{1}{2}| {5}/{5} (100%)"
    string1 = string1.format(content, current_length, current_location, remaining_length,
                             current_progress, overall_progress, percentage, remaining_progress)
    
    # 是否完成
    # 如果百分比为100,也就是完成
    if percentage == 100:
        # 检测相差字符长度,并且加上10进行保底
        difference_space = len(string) - len(string1) + 10
        # 设置要返回的字符串
        string = string1 + difference_space * " "
    # 返回结果
    return (string)

# 获取完整进度条
def progressbar(count, prefix="", times=0.2, size=1, stylelist=["=", "□", "-"], file=sys.stdout):
    # 参数
    # count:总长度
    # prefix:内容
    # times:间隔时间
    # (默认为0.2秒)
    # size:单个字符宽度
    # (默认为1个字符长度)
    # stylelist:[已经过的字符,当前字符,还没过的字符]
    # (每个空最好为1个字符的宽度)
    # (默认为["=","□","-"])
    # file:不赘述了(默认值为sys.stdout)

    # 获取一个列表(从1至count+1)
    it = range(1,count+1)

    # 打印为0时的状况
    text = get_progress_bar(prefix, 0, count, size, [stylelist[2], stylelist[2], stylelist[2]])
    file.write("\r"+text)

    # 打印不为0时的情况
    for item in it:
        time.sleep(times)
        text = get_progress_bar(prefix, item, count, size, stylelist)
        file.write("\r"+text)
    
    # 打印结束后换行
    file.write("\n")

if __name__ == "__main__":
    # 调用运行函数
    progressbar(count=3, prefix="Python", times=0.5, size=2)
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值