Tkinter: ProgressBar à durée indéterminée
J'aimerais implémenter une barre de progression dans Tkinter qui remplit les conditions suivantes:
- La barre de progression est le seul élément à l'intérieur de la fenêtre principale
- Il peut être lancé par une commande de démarrage sans avoir besoin d'appuyer sur un bouton
- Il est en mesure d'attendre jusqu'à ce qu'une tâche avec une durée inconnue est fini
- L'indicateur de la barre de progression continue de bouger tant que la tâche n'est pas terminée
- Il peut être fermé par une commande d'arrêt sans avoir besoin d'appuyer sur n'importe quel arrêt de la barre de
Jusqu'à présent, j'ai le code suivant:
import Tkinter
import ttk
import time
def task(root):
root.mainloop()
root = Tkinter.Tk()
ft = ttk.Frame()
ft.pack(expand=True, fill=Tkinter.BOTH, side=Tkinter.TOP)
pb_hD = ttk.Progressbar(ft, orient='horizontal', mode='indeterminate')
pb_hD.pack(expand=True, fill=Tkinter.BOTH, side=Tkinter.TOP)
pb_hD.start(50)
root.after(0,task(root))
time.sleep(5) # to be replaced by process of unknown duration
root.destroy()
Ici, le problème est que la barre de progression ne s'arrête pas après le 5s.
Quelqu'un pourrait-il m'aider à trouver l'erreur?
OriginalL'auteur Rickson | 2014-08-08
Vous devez vous connecter pour publier un commentaire.
Une fois le mainloop est active, le script l'habitude de passer à la ligne suivante jusqu'à ce que la racine est détruit.
Il pourrait y avoir d'autres façons de le faire, mais je préfère le faire à l'aide de threads.
Quelque chose comme cela,
Laissez-moi savoir si cela aide.
root.quit
parroot.destroy()
. Sinon le script n'a pas arrêté correctement. Une dernière question: Est-il possible de fermer la complète de la fenêtre principale automatiquement à la fin (lorsque la barre d'état s'est arrêté)?Super, je suis content d'avoir pu aider. ... Maintenant, en "fermant le principal windows" windows faites-vous allusion? Ce code n'a TKinter-fenêtre racine. Existe-il d'autres fenêtres?
Ne serait pas sys.exit() ou quitter() aider dans ce cas? Nous pouvons ajouter qu'en dessous de la racine.quit() dans la fonction process_of_unkown_duration(racine). Est-ce que c'est?
La barre d'état sera par la suite être intégrés dans le programme principal et
sys.exit()
serait de fermer le programme principal. Le seul problème maintenant c'est que le code ci-dessus s'ouvre dans une nouvelle fenêtre Tkinter contenant la barre d'état qui ne sera pas fermé après la barre d'état s'arrête. Le code s'exécutant sans erreurs.Je ne comprends pas. La solution est assez simple. Mais j'aurais besoin de votre aide pour comprendre mieux. Il y a seulement 3 fonctions. 1) ProgressBar, 2) process_of_unkown_duration, 3) Détruire la Progressbar. .... Ou est-il un 4ème fonction? Ce qui est le cas. Lorsque vous souhaitez effectuer des sys.exit()? Immédiatement après la progressbar est fermé? Ou Attendre une autre fonction à l'exécution et ensuite faire sys.exit()?
OriginalL'auteur Md. Mohsin