Сначала Когда я нажимаю кнопку и выбираю файлы / каталоги, которые хочу скопировать, я проверяю, в каком размере они все объединены.Я сохраняю это и устанавливаю максимальное значение индикатора выполнения в общий размер.Затем выполняется метод start_calc.
for item in self.file_and_directory_list:
folder = ""
my_file = ""
if os.path.isdir(item):
folder = item
else:
my_file = item
if folder != "":
print("folder")
for (path, dirs, files) in os.walk(folder):
for file in files:
filename = os.path.join(path, file)
folder_size += os.path.getsize(filename)
else:
folder_size += os.path.getsize(item)
if os.path.exists(new_destination):
for (path, dirs, files) in os.walk(new_destination):
for file in files:
filename = os.path.join(path, file)
folder_size += os.path.getsize(filename)
processing_bar_copy_files["maximum"] = folder_size
processing_bar_copy_files["value"] = 0
threading.Thread(target=self.start_calc, args=(folder_size, new_destination)).start()
Метод start_calc, где я вычисляю размер целевого каталога и проверяю, меньше ли он по сравнению с исходным каталогом.Если оно меньше, значение индикатора выполнения устанавливается равным размеру каталога назначения:
def start_calc(self, source_folder_size, new_destination):
folder = new_destination
dest_folder_size = 0
try:
for (path, dirs, files) in os.walk(folder):
for file in files:
filename = os.path.join(path, file)
dest_folder_size += os.path.getsize(filename)
except Exception as error:
tkinter.messagebox.showerror(f"Er is iets fout gegaan:\n{error}")
finally:
if processing_bar_copy_files["value"] < processing_bar_copy_files["maximum"]:
processing_bar_copy_files["value"] = dest_folder_size
progress_percentage = (processing_bar_copy_files["value"] / processing_bar_copy_files["maximum"]) * 100
progress_text_var.set(str("{:.1f}".format(progress_percentage) + "%"))
self.size = dest_folder_size
window.after(500, self.start_calc, source_folder_size, new_destination)
Если копирование файлов завершено, индикатор выполнения удаляется и останавливается, а кнопка возвращается.