У меня есть окно tkinter с одной кнопкой и одной текстовой меткой. При нажатии кнопки скрипт загружает файл по FTP. Я хочу, чтобы ярлык отображал текущий прогресс загрузки Код для загрузки, корневое окно и монитор прогресса - все работает. Однако метка начинается с 0 и не обновляется до тех пор, пока загрузка не будет завершена, и в этот момент она обновляется до 100. Как я могу заставить код, который запускает кнопка, запускаться одновременно с окном mainloop () и обеспечивать их связь?
from Tkinter import *
from time import sleep
from ftplib import FTP
import os
try:
root = Tk()
class processor():
def __init__(self):
self.amount_transfered=0
self.download_size=0
def window(self,master):
self.content = Frame(master)
self.content.grid(column=0, row=0)
self.content.master.title('Parcel Processor')
self.downLbl=Label(self.content,text='Downloading').grid(column=0,row=0)
self.downVar=StringVar()
self.downVar.set('0')
self.downPct=Label(self.content,textvariable=self.downVar).grid(column=1,row=0)
self.start=Button(self.content, text='START', command=self.parcelDownloader).grid(column=0, row=1)
def handleDownload(self,block):
self.parcel_zip.write(block)
self.downVar.set(str(((self.amount_transfered + len(block))*100)/self.download_size))
self.amount_transfered = self.amount_transfered + len(block)
def parcelDownloader(self):
os.chdir(r"C:\GIS Projects\Parcel Downloads")
ftp=FTP("FTPSITE", "User", "Pass")
ftpdatelist=[]
for filename in ftp.nlst():
if filename[0:2]=='pa':
ftpdatelist.append(filename[:8])
parcels='%s.zip' % max(ftpdatelist)
self.download_size=ftp.size(parcels)
try:
self.parcel_zip = open("parcels.zip", 'wb')
ftp.retrbinary('RETR %s' % parcels, self.handleDownload, 327680)
self.parcel_zip.close()
except Exception as e:
print e
self.parcel_zip.close()
finally:
ftp.quit()
self.amount_transfered=0
processor=processor()
processor.window(root)
root.mainloop()
except Exception as e:
print e
sleep(10)