列表框更新

时间:2011-04-30 00:24:36

标签: python tkinter

当我运行它时,它只显示完成下载后的百分比,那么有没有办法在下载时显示它?

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 个答案:

答案 0 :(得分:1)

Tkinter事件循环(由mainloop()启动)在单个线程上运行。它旋转,对事件(例如鼠标点击),重新绘制小部件等作出反应。单击按钮开始下载时,控制权将传递给您的download0()功能。在控制返回到事件循环之前,除非您告诉他们,否则不会重绘任何小部件。

因此,在下载过程中,您需要告诉窗口小部件重绘:

listbox.insert(END, percent)
listbox.update_idletasks()