Я хочу индикатор выполнения, который показывает пользователю процесс загрузки. При обновлении GUI и загрузке в то же время индикатор прогресса замирает, и я понимаю, почему, но я не знаю, как его решить. Я пробовал многопоточность, используя этот пост: Tkinter: How to use threads to preventing main event loop from “freezing” и используя The Basics of Python Multithreading and Queues в качестве руководства, чтобы помочь мне подогнать его под мои нужды. Проблема в том, каким образом я пытаюсь достичь своей цели, я всегда, кажется, ошибаюсь, меняя ее, чтобы делать то, что мне нужно.ttk progress bar freezing
Самых основная версия моего кода (без многопоточности):
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)
Примечание: В этом коде AllClasses
список различных классов, из которых календарного файл должен быть загружен.
Сам код является частью довольно большого класса, который я не включил. Вот почему я использую self. [Variablename]
Когда этот код работает, индикатор прогресса не загружается и не обновляется, все файлы загружаются правильно, и когда они загружаются, индикатор выполнения обновляет все сразу. Мой вопрос: как мне решить эту проблему в моем случае?