IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Tkinter Python Discussion :

Téléchargement d'un fichier par FTP et affichage de l'avancement dans une fenêtre Tkinter (threading)


Sujet :

Tkinter Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Téléchargement d'un fichier par FTP et affichage de l'avancement dans une fenêtre Tkinter (threading)
    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

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Téléchargement d'un fichier par FTP et affichage de l'avancement dans une fenêtre Tkinter (threading)
    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.
    Des idées ?

    Merci d'avance

    PS : Message déjà posté sur le forum spécialisé tkinter mais compte tenu des différents modules nécessaires je le reposte ici.

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par BenH4 Voir le message
    Ou si cela n'est pas possible trouver une autre solution.
    Des idées ?
    C'est possible mais pas grand monde ira écrire/tester du code à votre place: çà c'est votre boulot. Et si vous ne savez pas comment vous y prendre, il y a plein de tutos à votre disposition qui contiennent des exemples sur la programmation des threads avec tkinter (ou autre).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Affichage en arrière plan dans une fenêtre Jframe
    Par Askiarsh dans le forum Débuter
    Réponses: 12
    Dernier message: 10/05/2017, 00h27
  2. Problème d'affichage d'un tableau dans une fenêtre
    Par barney_vegeta dans le forum NetBeans
    Réponses: 4
    Dernier message: 03/05/2012, 18h56
  3. [WD16] Téléchargement de fichiers par FTP
    Par lololebricoleur dans le forum WinDev
    Réponses: 16
    Dernier message: 01/09/2011, 09h40
  4. Affichage d'un texte dans une fenêtre
    Par Aminesrine dans le forum Débuter
    Réponses: 6
    Dernier message: 24/03/2011, 20h52
  5. Problème de téléchargement de fichier par FTP
    Par Xalex dans le forum Web & réseau
    Réponses: 3
    Dernier message: 01/09/2008, 17h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo