PyGtk : pourquoi parfois il exécute pas les commandes dans l'ordre ?
Bonjour,
Je cherche une autre façon de télécharger un fichier, en python pur. Mais je suis face à un problème... Voici mon code (exemple simplifié pour vous expliquer ce qui marche pas) :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| import gtk, pygtk, urllib2
class HelloWorld:
def download_file(self,url,theBuffer):
file_name = url.split('/')[-1]
u = urllib2.urlopen(url)
f = open("/var/lib/Sab/cache/"+file_name, 'wb')
meta = u.info()
file_size = int(meta.getheaders("Content-Length")[0])
print("Telechargement de : {0} Bytes: {1}".format(url, file_size))
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)
p = float(file_size_dl) / file_size
status = r"{0} [{1:.2%}]".format(file_size_dl, p)
theBuffer.insert(theBuffer.get_end_iter(), status+"\n")
def __init__(self):
install = gtk.Window()
install.set_default_size(910,750)
install.set_position(gtk.WIN_POS_CENTER_ALWAYS)
hbox = gtk.VBox()
labInst = gtk.Label()
labInst.set_markup("<span size=\"x-large\">Installation en cours...</span>")
hbox.pack_start(labInst,expand=False)
messages = gtk.TextView()
messages.set_editable(False)
scrollmess = gtk.ScrolledWindow()
scrollmess.add(messages)
hbox.pack_end(scrollmess,expand=True)
install.add(hbox)
install.show_all()
self.download_file("http://download-origin.cdn.mozilla.net/pub/mozilla.org/firefox/releases/1.0.5/source/firefox-1.0.5-source.tar.bz2", messages.get_buffer())
if __name__ == "__main__":
HelloWorld()
gtk.main() |
Les lignes :
Citation:
status = r"{0} [{1:.2%}]".format(file_size_dl, p)
theBuffer.insert(theBuffer.get_end_iter(), status+"\n")
sont sensées ajouter le status dans la gtk.TextView "messages".
Le problème : la fenêtre ne s'affiche pas !! C'est comme s'il exécutait
Citation:
self.download_file("http://download-origin.cdn.mozilla.net/pub/mozilla.org/firefox/releases/1.0.5/source/firefox-1.0.5-source.tar.bz2", messages.get_buffer())
avant
Citation:
install.show_all()
En effet si vous commentez la ligne
Citation:
self.download_file("http://download-origin.cdn.mozilla.net/pub/mozilla.org/firefox/releases/1.0.5/source/firefox-1.0.5-source.tar.bz2", messages.get_buffer())
Alors la fenêtre s'affiche...
Savez-vous pourquoi et comment puis-je résoudre mon problème ?
Merci d'avance pour votre aide.
Floréal.