列表框更新
当我运行这个程序时,它只在下载完成后显示百分比。那么,有没有办法让它在下载的过程中就显示百分比呢?
listbox = Listbox(Admin)
listbox.grid(row=19, column=9)
def download0(runums, song):
chunks = 10000
dat = ''
runum = runums.replace(' ', '%20')
url = runum
down = urlopen(url)
downso = 0
tota = down.info().getheader('Content-Length').strip()
tota = int(tota)
while 1:
a = down.read(chunks)
downso += len(a)
if not a:
break
dat += a
percent = float(downso) / tota
percent = round(percent*100, 1)
sys.stdout.write(str(percent))
sys.stdout.flush()
sys.stdout.write("\b"*4)
listbox.insert(END, percent)
1 个回答
1
Tkinter的事件循环(通过mainloop()
启动)是在一个线程上运行的。它会不停地转动,响应各种事件(比如鼠标点击),重新绘制界面上的小部件等等。当你点击一个按钮开始下载时,控制权就会转到你的download0()
函数。在控制权返回到事件循环之前,界面上的小部件不会自动重新绘制,除非你特别指示它们去做。
所以在下载进行时,你需要告诉小部件重新绘制自己:
listbox.insert(END, percent)
listbox.update_idletasks()