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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 :
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
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
install.show_all()
En effet si vous commentez la ligne
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.