2

http://mysite.com/id?id=abc1名前 ( 、http://mysite.com/id?id=abc2、 ...)に基づいて、離れたサーバーから画像をダウンロードしたい。

ダウンロード部分は動作しますが、ダウンロードするファイルが多い (場合によっては 200 以上) 可能性があるため、「お待ちください」(Tkinter) というラベルを追加したいと考えています。問題は、ダウンロードが完了したときにのみラベルが表示されることです。もちろん、これはあまり役に立ちません。

どうすれば早く表示されるようになりますか?

from Tkinter import *
import urllib2
import time

window = Tk()
window.title('My Downloader')
photo=PhotoImage(file="logo.gif")
labl = Label(window, image=photo)
labl.pack()
mainid = Label(window, text = 'Main id:')
mid = Entry(window)
complete = Label(window, text = 'download complete !')

def dl():
    right = Label (window, text ='downloading...Please wait')
    right.pack()
    time.sleep(2)
    i='10'

    while int(i) <= 100000 :
        if len(str(i))==1:
            i="0000"+str(i)
        elif len(str(i))==2:
            i="000"+str(i)
        elif len(str(i))==3:
            i="00"+str(i)
        elif len(str(i))==4:
            i="0"+str(i)

        url = 'http://mysite.com/id?recordID='+ str(mid.get())+str(i)

        try:
            dltest = urllib2.urlopen(url)            
            with open(str(mid.get())+str(i)+'.tiff', 'wb') as f:
                while True:
                    content = dltest.read()
                    if not content: break
                    f.write(content)                
        except urllib2.URLError:            
            if int(i)==10:
                wrong = Label (window, text ='wrong id ')
                wrong.pack()
                break
            else:                
                complete.pack()
                break                                       
        i=int(i)+10
dlbutton = Button(window, text =' Download!', command=dl)
mainid.pack()
mid.pack()
dlbutton.pack() 
window.mainloop()
4

1 に答える 1

2

ラベルを設定した後、window.update() を呼び出すだけです。

right = Label (window, text ='downloading...Please wait')
right.pack()
window.update()

しかし、より良い方法は、URL のダウンロードをスレッド化することです。これはかなり複雑な作業になる可能性がありますが、ファイルのダウンロード中に GUI を解放できます。プログラムをスレッド化する方法については、このページをご覧ください。

于 2012-12-08T12:53:28.347 に答える