Bonjour,
J'aimerais pouvoir afficher l'avancement du téléchargement d'un fichier par FTP en utilisant une fenêtre tkinter.
Le problème est que, après quelques recherches, j'ai remarqué que pour faire cela il fallait probablement utiliser le threading. Or, vu mon niveau en python, je ne comprends absolument pas son fonctionnement. J'ai trouvé quelques partie de code pouvant probablement être modifié pour faire cela, en prenant ce code :
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
45
46
47
48
from threading import Thread
from time import sleep
from tkinter import Button, Label, Tk
 
 
class App(Tk):
 
    def __init__(self):
        Tk.__init__(self)
        self.label = Label(self, text="Stopped.")
        self.label.pack()
        self.play_button = Button(self, text="Play", command=self.download)
        self.play_button.pack(side="left", padx=2, pady=2)
        self.stop_button = Button(self, text="Stop", command=self.stop)
        self.stop_button.pack(side="left", padx=2, pady=2)
        self._thread, self._pause, self._stop = None, False, True
 
    def action(self):
        for i in range(1000):
            if self._stop:
                break
            while self._pause:
                self.label["text"] = "Pause... (count: {})".format(i)
                sleep(0.1)
            self.label["text"] = "Playing... (count: {})".format(i)
            sleep(0.1)
        self.label["text"] = "Stopped."
 
 
    def download(self):
        if self._thread is None:
            self._stop = False
            self._thread = Thread(target=self.action)
            self._thread.start()
        self._pause = False
        self.play_button.configure(text="Pause", command=self.pause)
 
    def pause(self):
        self._pause = True
        self.play_button.configure(text="Play", command=self.play)
 
    def stop(self):
        if self._thread is not None:
            self._thread, self._pause, self._stop = None, False, True
        self.play_button.configure(text="Play", command=self.play)
 
 
App().mainloop()
J'aimerais introduire le mien :
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
from ftplib import FTP
 
def connect():
    global ftp
    ftp = FTP('url')
    ftp.login(user='username', passwd='pass')
 
 
def downloadMaj():
    global sizeWritten,temp
 
    def write(block):
        global sizeWritten, temp
        localsetup.write(block)
        sizeWritten += len(block)
        percentComplete = int((sizeWritten / totalSize)*100)
        if percentComplete != temp:
            print(percentComplete, " %")
            temp = percentComplete
 
    connect()
    setupFile = 'setup.exe'
    totalSize = ftp.size(setupFile)
    sizeWritten = 0
    temp = -1
    localsetup = open(setupFile, 'wb')
    ftp.retrbinary('RETR '+setupFile, write)
    ftp.quit()
    localsetup.close()
Ou si cela n'est pas possible trouver une autre solution.

Merci d'avance