ну примерно вот так:
from tkinter import *
import tkinter.ttk as ttk
import shutil, os
import time
class Application(Frame):
def __init__(self, master):
super(Application, self).__init__(master)
self.progressVar = IntVar() # переменная в которой храним прогресс прогрессбара
self.grid()
self.create_widgets()
def create_widgets(self):
self.pb = ttk.Progressbar(length=200, variable = self.progressVar, maximum = 100)
self.pb.grid()
def incPB(self):
# увеличить состояние прогрессбара на 1
self.progressVar.set(self.progressVar.get()+1)
self.pb.update()
def copyfiles(self):
src = "e:\\from"
dst = "e:\\to"
countFiles = 0
#считаем к-во файлов
for path, dirs, filenames in os.walk(src):
countFiles = countFiles + len(filenames)
self.pb['maximum'] = countFiles # устанавливаем максимум прогресбара равнйм к-ву файлов
self.progressVar.set(0) # обнуляем счетчик прогрессбара
#копируем
shutil.copytree(src, dst, copy_function=self.copyProgress)
def copyProgress(self, src, dst):
# функция котороую дергает shutil.copytree при каждом копировании файла
print('copy from',src, 'to', dst)
shutil.copy2(src,dst)
self.incPB()
time.sleep(1) # задержка чтобы было видно прогресс на примере из пары файлов
root = Tk()
app = Application(root)
app.copyfiles()
root.mainloop()
это при условии что dst не существует, в таком случае оно само все сделает.
Иначе копировать пофайлово и проверять на существование
from tkinter import *
import tkinter.ttk as ttk
import shutil, os
import time
class Application(Frame):
def __init__(self, master):
super(Application, self).__init__(master)
self.progressVar = IntVar() # переменная в которой храним прогресс прогрессбара
self.grid()
self.create_widgets()
def create_widgets(self):
self.pb = ttk.Progressbar(length=200, variable = self.progressVar, maximum = 100)
self.pb.grid()
def incPB(self):
# увеличить состояние прогрессбара на 1
self.progressVar.set(self.progressVar.get()+1)
self.pb.update()
def copyfiles(self):
src = "e:\\from"
dst = "e:\\to"
countFiles = 0
#считаем к-во файлов
for path, dirs, filenames in os.walk(src):
countFiles = countFiles + len(filenames)
self.pb['maximum'] = countFiles # устанавливаем максимум прогресбара равнйм к-ву файлов
self.progressVar.set(0) # обнуляем счетчик прогрессбара
#копируем
for path, dirs, filenames in os.walk(src):
for directory in dirs:
srcPath = os.path.join(path, directory)
dstPath = srcPath.replace(src,dst)
if not os.path.exists(dst):
os.makedirs(dstPath)
for fileName in filenames:
srcPath = os.path.join(path, fileName)
dstPath = srcPath.replace(src, dst)
if not os.path.exists(dst):
print('copy from', srcPath, 'to ', dstPath)
shutil.copy(srcPath, dstPath)
self.incPB()
time.sleep(1) # задержка чтобы было видно прогресс на примере
root = Tk()
app = Application(root)
app.copyfiles()
root.mainloop()
прогрессбар отбражает только к-во скопированых файлов,без учета размера. Если хотите с учетом размера то алгоритм будет сложнее.