0
我在製作一個下載文件的Python程序。我使用Tkinter作爲GUI,但它凍結時下載較大的文件,停止顯示緩衝區。我嘗試使用線程,因爲它在S.O.的類似問題中提出。但沒有任何改變。這裏是代碼:即使使用線程,Tkinter窗口也會凍結
labelText1 = StringVar()
labelText1.set("Double-click file to download...")
label11 = Label(app, textvariable=labelText1, height=2, bg="#DF1A2B", fg="white")
label11.place(x=50, y=50)
def download_file(url):
file_name = url.split('/')[-1]
u = urllib2.urlopen(url)
f = open("./downloads/" + file_name, 'wb')
meta = u.info()
file_size = int(meta.getheaders("Content-Length")[0])
print "Downloading: %s" % (file_name)
os.system('cls')
file_size_dl = 0
block_sz = 8192
while True:
buffer = u.read(block_sz)
if not buffer:
break
file_size_dl += len(buffer)
f.write(buffer)
status = r"%10d [%3.2f%%]" % (file_size_dl, file_size_dl * 100./file_size)
status = status + chr(8)*(len(status)+1)
labelText1.set(status,)
tuple = (file_name, status)
f.close()
onEnd()
def onEnd():
labelText1.set("Status: done!")
def double_clicked(clicked):
tuple = mlb.get(clicked)[0]
url = str(tuple[2])
if tuple[1] != "Folder":
t = threading.Thread(target=download_file(url))
t.start()
else:
print "FOLDER HANDLING GOES HERE"
是否有任何其他方式可以讓我在下載過程仍在運行時更改標籤文本?
如果在while循環期間刷新GUI,會發生什麼情況,例如,使用'update()'? – 101 2014-12-03 22:27:42
您可能需要'while true:'循環中的'time.sleep()'調用,如[此問題的代碼]所示(http://stackoverflow.com/questions/24216760/multithreaded-file-download-in-蟒和更新管理在殼與下載-逐行?RQ = 1)。 – martineau 2014-12-03 22:30:21
@figs這實際上解決了問題!現在圖形用戶界面正在更新正常...您能否將此作爲答案,以便我可以接受它? – 2014-12-03 22:35:46