繁体   English   中英

无法更新 python progressbar2 中的进度条

[英]unable to update progress bar in python progressbar2

import string
from ctypes import windll
from glob import glob
import os
import time
import progressbar
global totalFiles

def read_drives(drive):
    totalFiles=0
    totalDirs=0
    l=os.listdir(drive)
    l=len(l)
    bar = progressbar.ProgressBar(max_value=l)
    for  base, dirs, files in os.walk(drive):
        #print('Searching in : ',base)
        for directories in dirs:
            totalDirs+=1
            bar.update(totalDirs)
        for Files in files:
            totalFiles +=1

def get_drives():
    drives = []
    bitmask = windll.kernel32.GetLogicalDrives()
    for letter in string.ascii_uppercase:
        if bitmask & 1:
            drives.append(letter)
        bitmask >>= 1

    return drives 

if __name__ == '__main__':
    lis = get_drives() 
    read_drives(lis[2]+':\\')

仍然没有解决方案请帮助,显示此错误 - “ValueError:值 32 超出范围,应介于 0 和 31 之间”我需要在搜索“驱动器”中的目录数量时显示进度条。

        for directories in dirs:
            bar.update(totalDirs)
        for Files in files:
            totalFiles +=1

您不会在任何地方增加totalDirs 为什么你期望进度条改变它的值? 该栏实际上确实会自行更新,但您看不到这一点,因为您一次又一次地将相同的 0 扔给它。 您必须像使用totalDirs一样增加totalFiles

        for dir in dirs:
            totalDirs += 1
            bar.update(totalDirs)
        for file in files:
            totalFiles += 1

编辑:您将进度条的最大值设置为顶级目录驱动器中的目录数,但稍后将这些目录中的目录添加到 totalDirs。 您必须递归地计算目录。 您完整的read_drives代码应如下所示:

def read_drives(drive):
    totalFiles = 0
    totalDirs = 0
    l = 0
    for  base, dirs, files in os.walk(drive):
        l += len(dirs)

    bar = progressbar.ProgressBar(max_value=l)
    for  base, dirs, files in os.walk(drive):
        for directories in dirs:
            totalDirs += 1
            bar.update(totalDirs)
        for Files in files:
            totalFiles += 1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM