копировать файлы в python с индикатором выполнения - PullRequest
0 голосов
/ 17 июня 2020

У меня есть сценарий python, который копирует папки и файлы, существующие в выбранном месте. Эта задача работает отлично, теперь я хочу отображать индикатор выполнения при копировании.

Я использовал пакет tqdm , который отображает индикатор выполнения в консоли, и он работает хорошо, но проблема в том, что он отображает индикатор выполнения для каждого файла и каждый раз просматривает все существующие файлы.

пример: если папка включает 128 файлов, он будет отображать индикатор выполнения 128 раз, как это

100% --------- 128/128 100% --------- 128/128

я хочу, чтобы индикатор выполнения отображался 1 раз для всех копируемых файлов.

код:

i=0
j=0
z=0
for dirpath, dirnames, files in os.walk(src):           
    print(f'Found directory: {dirpath}')
    if len(dirnames)==0 and len(files)==0:
        print("this directory is empty")
        pass

    for  file in files:
        full_file_name = os.path.join(dirpath, file)

        if os.path.join(dirpath) == src:
            if file.endswith("pdf"):
                if not os.path.exists(dst2):
                    os.mkdir(dst2)
                else:
                    print("the path alredy exist")

                 shutil.copy(full_file_name, dst2)
                i+=1

            elif file.endswith("docx") or file.endswith("doc"):

                 shutil.copy(full_file_name, dst)
                j+=1

        elif os.path.join(dirpath)== src2:
            if file.endswith("pdf"):
                numfile = len(files)

# i think the for loop must not be in this part.
                for z in enumerate(tqdm(numfile)): 
                    sleep(.1)

                 shutil.copy(full_file_name, dst3)
                z+=1

1 Ответ

0 голосов
/ 17 июня 2020

просто создайте один виджет панели выполнения tkinter и передайте ему значения из l oop. закрыть окно после завершения выполнения печати на консоль

Изображение Progressbar

Пример кода для обновления индикатора выполнения с помощью tkinter

from tkinter import *
from tkinter.ttk import Progressbar
import time
def progressbar(ProgressValue):##### Update Progress bar with a int/float/string Round 0-100 #####
    ProgBar['value'] = ProgressValue; root.update()
root = Tk()
ProgBar = Progressbar(root, length=365, style='black.Horizontal.TProgressbar')
ProgBar.pack()

time.sleep(2)
progressbar('10') #Use this
time.sleep(2)
progressbar('50')
time.sleep(2)
progressbar('100')
root.mainloop()
...