Ich habe eine funktionierende GUI mit einem wackeligen Fortschrittsbalken. Mein Problem scheint zu sein, dass ich den Fortschrittsbalken basierend auf der Anzahl der Elemente im Quellverzeichnis nicht korrekt ausführen kann. Irgendwelche Ideen?Tkinter ProgressBar und Os.Walk in Python 2.7
def Progress(self):
progress = Frame(self)
progress.pack(fill=X)
self.progressLine = ttk.Progressbar(progress, orient=HORIZONTAL, length=550, mode='determinate', maximum=100)
self.progressLine.pack(pady=5)
def Scatter(self):
self.t_start.delete('1.0', END)
if Entry.get(self.sourceE) > 0 or Entry.get(self.destE) > 0:
if not os.path.exists(Entry.get(self.sourceE)) or not os.path.exists(Entry.get(self.destE)):
self.t_start.delete('1.0', END)
self.t_start.insert(END, '*WARNING* Missing Source and/or Destination Folders')
return
self.t_start.delete('1.0', END)
self.t_start.insert(END, "Counting Assets\n")
self.totalFiles = len(list(os.walk(os.path.abspath(Entry.get(self.sourceE)))))
self.stepFiles = (100/self.totalFiles)
self.progressLine['value'] = self.stepFiles
self.t_start.insert(END, "Process Started...\n")
#self.progressLine.step(self.stepFiles)
for root, subFolders, files in os.walk(Entry.get(self.sourceE)):
self.progressLine.step(self.stepFiles)
for file in files:
if not file.startswith('.'):
subFolder = os.path.join(Entry.get(self.destE), file[:1], file[:2], file [:3], file [:4])
checkFile = os.path.join(subFolder, file)
if not os.path.isdir(subFolder):
os.makedirs(subFolder)
if not os.path.exists(checkFile):
shutil.move(os.path.join(root, file), subFolder)
else:
global fname, fextension
fname, fextension = os.path.splitext(file)
ii = 1
while True:
new_pname = os.path.join(subFolder, fname + "_" + str(ii) + fextension)
new_name = fname + "_" + str(ii) + fextension
if not os.path.exists(new_pname):
shutil.copy(checkFile, new_pname)
change_files = "From: " + file + " to: " + new_name + "\n"
self.t_start.insert(END, change_files)
if self.CheckVar.get() == 1:
delfile = os.path.join(root, file)
delete_files = "Deleted Original: " + file + "\n"
self.t_start.insert(END, delete_files)
os.remove(delfile)
break
ii += 1
self.progressLine.update_idletasks()
self.t_start.insert(END, "Process Complete")
self.progressLine.update_idletasks()
Alles funktioniert, mein einziges Problem ist die Variable "stepFiles". Wie würde ich das genauer machen als das, was ich schon habe?
Vielleicht ist es, wie ich StepFiles berechnen? Ich fühle mich, als würde ich etwas Einfaches vermissen.
Ich entfernte Maximum = 100 von self.progressLine, nahm self.stepFiles = (100/self.totalFiles) und setzte self.progressLine ["maximum"] = self.totalFiles. Aber während der Code ausgeführt wird, scheint der Fortschrittsbalken immer noch hochzufahren und immer wieder neu zu starten. - Ich fühle, dass ich zu oft rufe? – sdavis891
Alles, was du ändern musstest, war 'self.stepFiles' zu' self.stepFiles = (100.00/self.totalFiles) ' – Jkdc
Wenn du diese zweite Route benutzt hast, musst du auch zu' self.progressLine.step (1) 'wechseln – Jkdc