Форум сайта python.su
0
Здравствуйте!
В моей программе имеется функция копирования файлов и директорий.
использую Tkinter для создания GUI, сделал прогрессбар, задача состоит в том, чтобы прогресс бар обновлялся в реальном времени во время копирования. Не знаю как связать эти два элемента вместе. Просьба помочь
Офлайн
294
Вы бы выложили хоть какойто код который можно запустить. Потому как на ваш вопрос в текущей формулировке возможен только вот такой ответ:
https://www.google.com/?gfe_rd=cr&ei=3o5aWZX7NsPi8Ae65rtQ&gws_rd=ssl#q=python+progressbar+copy
[code python][/code]
Отредактировано PEHDOM (Июль 3, 2017 21:44:34)
Офлайн
0
Например вот такой код:
from tkinter import * import tkinter.ttk as ttk import shutil, os class Application(Frame): def __init__(self, master): super(Application, self).__init__(master) self.grid() self.create_widgets() def create_widgets(self): self.pb = ttk.Progressbar(length=200) self.pb.grid() def copyfiles(self): folder_from = "C://test123" folder_to = "E://new" for f in os.listdir(folder_from): if os.path.isfile(os.path.join(folder_from, f)): shutil.copy(os.path.join(folder_from, f), os.path.join(folder_to, f)) if os.path.isdir(os.path.join(folder_from, f)): shutil.copytree(os.path.join(folder_from, f), os.path.join(folder_to, f)) root = Tk() app = Application(root) app.copyfiles() root.mainloop()
Офлайн
294
ну примерно вот так:
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()
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()
[code python][/code]
Отредактировано PEHDOM (Июль 4, 2017 17:05:46)
Офлайн
0
Спасибо, очень признателен. Буду пробовать
Офлайн
0
PEHDOM
ну примерно вот так:
Отредактировано FrakeStolsTM (Июль 4, 2017 19:55:35)
Офлайн
294
млин недосмотрел
if not os.path.exists(dst):
if not os.path.exists(dstPath):
[code python][/code]
Отредактировано PEHDOM (Июль 4, 2017 20:06:11)
Офлайн
0
PEHDOMОгромное спасибо, Вы мне очень помогли)
млин недосмотрел
Офлайн
0
Всех приветствую. Спасибо за идею и реализацию. Но есть вопрос. Прогрессбар доходит до конца и не закрывается.
Офлайн
294
Fedor_BoberТак надо его закрыть. Это всего лишь простейший пример демонстрирующий общий принцип работы там много чего нет, это уже каждый допиливает по мере того что ему нужно.
Прогрессбар доходит до конца и не закрывается.
[code python][/code]
Офлайн