Je t'ai posté un truc en en décrivant un autre...
Tu veux que la barre s'anime comme un gif ou qu'elle représente le progrès actuel de l'upload ?
(16-04-2018, 22:43:23)PengouinBSD a écrit : Si je comprends bien, je n'appelle plus directement ma class Gui, mais d'abord la class Worker ! C'est bien ça ?!
Non

Je t'ai refait un code qui marche.
Tout en bas, tu as le "main" : Le gui s'initialise, lance le worker (g.upload()) puis affiche un "hello" à 2.8 secondes d'intervalle indépendamment de ce que fais le worker.
Le worker pendant ce temps, te tient au courant en envoyant régulièrement son progrès au gui. Pour faire ça, il appelle une fonction du gui et passe son progrès en argument (gui.progressUpdate(i))
On peut imaginer que le gui fait évoluer la pgbar en fonction de ce que lui renvoie le worker à traver updateProgress. En même temps, l'utilisateur continue d'utiliser le gui pour préparer un 2ème upload par exemple.
Les 2 trucs qui peuvent t'intéresser en particulier dans mon script c'est :
-le Worker qui hérite du Thread et qui ajoute le gui à son scope (self.gui = gui). Ça permet d'acceder à gui.updateProcess depuis le worker par la suite.
- si tu rallonges la boucle du worker soit prudent. Tu ne peux plus la tuer. ctrl+C tue le gui mais le processus worker continue de se servir de gui.updateProgress() pour afficher son progrès un peu comme un nécromancien continue de se servir des morts. Elle est à 5 pour l'instant ça va. Je l'avais mis à 100 au début comme un crétin. Par la suite, pense à mettre un bouton qui appelle self.worker.cancel() pour pouvoir tuer le processus depuis le gui.
Voila le script chmod +x test.py && ./test.py
Code :
#!/usr/bin/env python3
import time
import threading
class Worker(threading.Thread):
def __init__(self, gui):
super().__init__(target=self.do_stuff)
self.gui = gui
def do_stuff(self):
for i in range(5):
time.sleep(1)
self.gui.updateProgress(i)
class Gui():
def __init__(self):
self.worker = Worker(self)
def upload(self):
self.worker.start()
def hello(self):
print("hello")
def updateProgress(self,i):
print("gui uploadProgress",i)
if __name__ == "__main__":
g = Gui()
g.upload()
g.hello()
time.sleep(2.8)
g.hello()
P.S: J'ai pas eu le temps de regarder ton code. Je vais me coucher.