Python tkinter正在更新线程进度上的进度条

Python tkinter正在更新线程进度上的进度条,python,tkinter,python-multithreading,Python,Tkinter,Python Multithreading,您好,如何根据线程完成情况更新进度栏。也就是说,我有16530个图像链接,我正试图下载这些链接,并希望创建一个显示下载进度的Progressbar download\u image函数很长,所以我没有将其包含在问题中,但基本上它是请求并写入文件。请参阅我的答案。@martineau谢谢,这将非常有帮助,这将以条形图的形式显示线程,对吗?我的意思是,如果我有13个线程,您的代码将显示长度为13的条是的,如果您设置进度条并正确更新它。您的线程需要定期将一些内容放入GUI部件的processIncom

您好,如何根据线程完成情况更新进度栏。也就是说,我有16530个图像链接,我正试图下载这些链接,并希望创建一个显示下载进度的
Progressbar


download\u image
函数很长,所以我没有将其包含在问题中,但基本上它是
请求
并写入文件。

请参阅我的答案。@martineau谢谢,这将非常有帮助,这将以条形图的形式显示线程,对吗?我的意思是,如果我有13个线程,您的代码将显示长度为13的条是的,如果您设置进度条并正确更新它。您的线程需要定期将一些内容放入GUI部件的
processIncoming()
方法的
队列中,以获取并使用该方法更新进度条。要记住的一件非常重要的事情是确保线程本身不试图访问或更新GUI。@martineau我明白了,计算下载的文件数并使用该数字更新
队列
(每个线程将更新
队列
),并且只使用
processIncoming()
更新进度条?听起来是一种可行的简化方法。理想的做法是计算所有下载文件的总字节数,并让进度条显示到目前为止已完成的总字节数-但我不知道这是否可行。请参阅我的答案。@martineau谢谢,这会有很大帮助,这会将线程显示为一个条,对吗?我的意思是,如果我有13个线程,您的代码将显示长度为13的条是的,如果您设置进度条并正确更新它。您的线程需要定期将一些内容放入GUI部件的
processIncoming()
方法的
队列中,以获取并使用该方法更新进度条。要记住的一件非常重要的事情是确保线程本身不试图访问或更新GUI。@martineau我明白了,计算下载的文件数并使用该数字更新
队列
(每个线程将更新
队列
),并且只使用
processIncoming()
更新进度条?听起来是一种可行的简化方法。理想的做法是计算所有下载文件的总字节数,并让进度条显示到目前为止已经完成的总字节数,但我不知道这是否可行。
from tkinter import * 
from tkinter.ttk import *
import threading
import numpy as np
def bar():
    #function to display progress
    pass
with open('/home/user154/test.txt') as f:
    total=f.read().split('\n')
root = Tk()
links = list(filter(None, total)) #16530 links
threads =[]
#creating chunks of length 10
chunks = [i.tolist() for i in np.array_split(links, 10) if i.size>0]
# Progress bar widget 
progress = Progressbar(root, orient = HORIZONTAL, 
              length = len(links), mode = 'determinate') 
#launching the threads
for lst in chunks:
    threads.append(threading.Thread(target=download_image, args=(lst)))
for x in threads:
   x.start()
for x in threads:
    x.join()


mainloop()