• [蟒蛇菜谱] Python方便使用的级联进度信息


    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%]

  • 相关阅读:
    linux下好用的文本编辑器
    linux下的截图
    linux三剑客之grep
    批量修改机器密码脚本
    shell实例九九乘法表
    卸载磁盘 device is busy
    解决 fatal error: fftw3.h: No such file or directory
    linux磁盘空间释放问题
    硬盘容量换算
    shell数组
  • 原文地址:https://www.cnblogs.com/tuzkee/p/3668093.html
Copyright © 2020-2023  润新知