class StepedProgress:
'''方便显示进度的级联进度信息。
'''
def __init__(self, stockPercent=[1], parentProgress=None):
self.percent = 0
self.info = ''
self.subProgress = []
self.cur_running_process = 0
self.stockPercent = stockPercent
self.parentProgress = parentProgress # 重新计算进度比,防止初始化时的值加起来不是1
w = 0.0
for p in self.stockPercent:
w += p
for i in range(0, len(stockPercent)):
stockPercent[i] = stockPercent[i]/w # 初始化子进度
if len(stockPercent) == 1:
self.subProgress = None
else:
for p in self.stockPercent:
self.subProgress.append(StepedProgress(parentProgress=self)) def subprogress(self, index):
if index >= self.subcount():
return self.subProgress[self.subcount()-1]
elif index < self.cur_running_process:
return self.subProgress[self.cur_running_process]
else:
self.cur_running_process = index
return self.subProgress[index] def subcount(self):
return len(self.subProgress) def notifyParentProgress(self, percent, info=None):
new_percent = 0.0
for i in range(0, self.cur_running_process):
new_percent += self.stockPercent[i]
new_percent += percent/100.0 * self.stockPercent[self.cur_running_process]
new_percent *= 100.0
self.notifyProgress(new_percent, info) def notifyProgress(self, percent, info=None):
if percent > self.percent:
self.percent = percent
if info is not None:
self.info = info
if self.parentProgress is not None:
self.parentProgress.notifyParentProgress(percent, info)
else:
print self.info[:77].ljust(80, '.'), "[%0.1f%%]"%self.percent if __name__ == "__main__":
s = StepedProgress([60, 40])
s.notifyProgress(10, 'aaa') s1 = s.subprogress(0)
s1.notifyProgress(50, 'bbb') s3 = s.subprogress(1)
s3 = StepedProgress([1, 1], parentProgress=s3.parentProgress) #级联子进度
s3.notifyProgress(20, 'ddd') s4 = s3.subprogress(0)
s4.notifyProgress(50, 'eee') s5 = s3.subprogress(1)
s5.notifyProgress(50, 'fff')

输出结果:

aaa............................................................................. [10.0%]
bbb............................................................................. [30.0%]
ddd............................................................................. [68.0%]
eee............................................................................. [70.0%]
fff............................................................................. [90.0%]

[蟒蛇菜谱] Python方便使用的级联进度信息的更多相关文章

  1. [蟒蛇菜谱] Python封装shell命令

    # -*- coding: utf-8 -*- import os import subprocess import signal import pwd import sys class MockLo ...

  2. [蟒蛇菜谱]Python日志记录最佳实践

    # -*- coding: utf8 -*- import logging # 创建一个logger logger = logging.getLogger('mylogger') logger.set ...

  3. [蟒蛇菜谱]Python函数参数传递最佳实践

    将函数作为参数传递,同时将该函数需要的参数一起传递.可参考threading.Timer的处理方式: class threading.Timer(interval, function, args=[] ...

  4. [蟒蛇菜谱]Python获取任意xml节点的值

    # -*- coding: utf-8 -*- import xml.dom.minidom ELEMENT_NODE = xml.dom.Node.ELEMENT_NODE class Simple ...

  5. [python] 常用正则表达式爬取网页信息及分析HTML标签总结【转】

    [python] 常用正则表达式爬取网页信息及分析HTML标签总结 转http://blog.csdn.net/Eastmount/article/details/51082253 标签: pytho ...

  6. Python 抓取网页并提取信息(程序详解)

    最近因项目需要用到python处理网页,因此学习相关知识.下面程序使用python抓取网页并提取信息,具体内容如下: #---------------------------------------- ...

  7. 如何使用 WinInet 时提供下载上载进度信息

    概要许多开发人员都使用 WinInet 函数来下载或上载文件在 Internet 上的想要提供一个进度条以指示多少文件传输已完成,但多少就越长.您可以使用以下机制来完成此.Collapse image ...

  8. 【原创】用JAVA实现大文件上传及显示进度信息

    用JAVA实现大文件上传及显示进度信息 ---解析HTTP MultiPart协议 (本文提供全部源码下载,请访问 https://github.com/grayprince/UploadBigFil ...

  9. python使用post登陆电子科大信息门户并保存登陆后页面

    python使用post登陆电子科大信息门户并保存登陆后页面 作者:vpoet mail:vpoet_sir@163.com #coding=utf-8 import HTMLParser impor ...

随机推荐

  1. 【转】Struts1.x系列教程(3):属性(资源)文件乱码问题的解决之道

    转载地址:http://www.blogjava.net/nokiaguy/archive/2009/01/archive/2009/01/archive/2009/01/14/251244.html ...

  2. windows消息和消息队列

    windows消息和消息队列 转自:http://blog.163.com/zhangjie_0303/blog/static/990827062010113062446767/ 与基于MS - DO ...

  3. ArrayBlockingQueue

    ArrayBlockingQueue是阻塞队列的一种,基于数组实现,长度固定,队尾添加,队首获取, 构造函数: p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font ...

  4. Java开发中经典的小实例-(100能被3整除的数打印出来)

    public class Test21 {    public static void main(String[] args) {        // TODO Auto-generated meth ...

  5. IE6兼容性问题及IE6常见bug详细汇总

    转载地址:http://www.jb51.net/css/76894.html 1.IE6怪异解析之padding与border算入宽高 原因:未加文档声明造成非盒模型解析 解决方法:加入文档声明&l ...

  6. iOS - Xcode 常用快捷键

    Xcode 常用快捷键 1)文件: command + shift + n 新建项目 command + n 新建文件 command + control + n 新建空文件 command + o ...

  7. Uiautomator ——API详解

    版权声明:本文出自carter_dream的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/4921701.html 简单的例子 以一个简 ...

  8. LinkedList源码分析

    LinkedList也和ArrayList一样实现了List接口,但是它执行插入和删除操作时比ArrayList更加高效,因为它是基于链表的.基于链表也决定了它在随机访问方面要比ArrayList逊色 ...

  9. TextView 行数控制

    控制textview只显示 2 行文本,超过 2 行显示展开/折叠按钮(mShowImage),isShow=true时,是展开状态,isShow=false时,是折叠状态 方法一: int line ...

  10. Python3.X新特性之print和exec

    print print 现在是一个函数,不再是一个语句.<语法更为清晰> 实例1 打开文件 log.txt 以便进行写入并将对象指定给 fid.然后利用 print将一个字符串重定向给文件 ...