Ich möchte einen Fortschrittsbalken, der dem Benutzer den Download-Fortschritt zeigt. Wenn die GUI aktualisiert und gleichzeitig heruntergeladen wird, friert die Fortschrittsleiste ein und ich verstehe warum, aber ich weiß nicht, wie ich sie lösen soll. Ich versuchte Multithreading mit diesem Beitrag: Tkinter: How to use threads to preventing main event loop from “freezing” und mit The Basics of Python Multithreading and Queues als Guid, um mir zu helfen, es an meine Bedürfnisse anzupassen. Das Problem ist, auf welche Weise ich versuche, mein Ziel zu erreichen, ich habe immer einen Fehler gemacht, wenn ich es ändere, um das zu tun, wozu ich es brauche.ttk Fortschrittsbalken Einfrieren
Die einfachste Version meines Codes (ohne Multithreading):
from Tkinter import *
import ttk
from urllib import URLopener # Downloading files
# Make frame to tell user what file is getting downloaded
self.Progressmsg = Label(self, text="TempValue")
self.Progressmsg.pack(pady=(10,0))
# Make progress bar to show user download progress
self.Progressbar = ttk.Progressbar(self, mode="determinate", orient='horizontal', lengt=280, maximum=len(self.AllClasses))
self.Progressbar.pack(padx=10, pady=10)
self.Progressbar["value"] = 0
def DownloadFile(Class):
# Update progress message
self.Progressmsg["text"] = "Downloading {0}.ics...".format(Class)
# Download each file from saxion website
CalFile = URLopener()
CalFile.retrieve("http://[school website]/ical/group/{0}.ics".format(Class), "Data/{0}.ics".format(Class))
# Update progress bar
self.Progressbar["value"] += 1
for Study in self.Parameters["Classes"]:
for Class in Study:
DownloadFile(Class)
Anmerkungen: In diesem Code AllClasses
ist eine Liste der verschiedenen Klassen, aus denen eine Kalender-Datei heruntergeladen werden muss.
Der Code selbst ist Teil einer ziemlich großen Klasse, die ich nicht einbezogen habe. Deshalb verwende ich self. [Variablenname]
Wenn dieser Code ausgeführt wird, wird die Fortschrittsanzeige nicht geladen oder aktualisiert, alle Dateien werden ordnungsgemäß heruntergeladen und beim Herunterladen wird die Fortschrittsleiste auf einmal aktualisiert. Meine Frage ist: Wie löse ich dieses Problem in meinem Fall?