⇨ MENU ⇨ MODULES ⇨ tkinter ⇨ extension ttk ⇨ Progressbar
Tutoriel de tkinter.ttk.Progressbar ( )
⇨ MENU ⇨ MODULES ⇨ tkinter ⇨ extension ttk ⇨ Progressbar
Tutoriel de tkinter.ttk.Progressbar ( )
DESCRIPTION.
Créer un nouveau controle de type barre de progression (widget : tkinter.ttk.Progressbar ( )).
SYNTAXE.
WAI_Attente = tkinter.ttk.Progressbar ( parent , attribut1 = valeur , ... , attributn = valeur )
WAI_Attente = ⇨ affectation de l'instance du controle [ optionnel ]
tkinter.ttk.Progressbar ( ) ⇨ création d'une instance de tkinter.ttk.Progressbar ( ) [ OBLIGATOIRE ]
parent ⇨ conteneur de l'instance de tkinter.ttk.Progressbar ( ) [ OBLIGATOIRE ]
attribut = valeur ⇨ attribut à modifier avec sa nouvelle valeur [ optionnel ]
CREATION DES BARRES DE PROGRESSION.
La classe tkinter.ttk.Progressbar ( ) n'est pas native du module tkinter, il faut donc commencer par importer le module d'extension tkinter.ttk pour pouvoir utiliser cette classe. Voir import pour plus de détails sur l'incorporation de modules, classes et méthodes non built-in dans un script.
Les barres de progression créées avec la classe tkinter.ttk.Progressbar ( ) permettent habituellement de commenter l'état d'avancement d'un processus nécessitant une durée relativement longue, ou saccadée. Mais elles peuvent aussi être utilisée comme chronomètre, ou compte à rebours pour divers type d'applications.
Les objets permanents de type tkinter.ttk.Progressbar ( ) sont identifiés dans le site par : WAI_.
Voir les conventions sur les variables utilisées dans ce site ...
GESTION DES BARRES DE PROGRESSION.
Une barre de progression peut proposer deux style de visuels pour son cheminement, définie grâce à son attribut mode :.
- si mode = "determinate", une jauge visuelle avance d'un bord à l'autre de la glissière ;
- si mode = "indeterminate", un curseur effectue des va-et-viens le long de la glissière.
Une barre de progression en mode = "determinate" fait défiler une valeur de type int ( ), débutant toujours à 0 jusqu'à la valeur affectée à son attribut maximum - 1. Puis redémarre à 0, et recommence le cycle. Par exemple, par défaut, une barre de progression parcourt toute les valeur de 0 à 99 de une en une, car :
- la première valeur est toujours 0 ;
- maximum vaut 100 par défaut ;
- la dernière valeur est donc 99, c'est à dire-à-dire 100 - 1 ;
- le pas d'incrémentation par défaut est 1 ;
- la barre de progression prendra donc toutes les valeurs de 0 à 99, soit 100 valeurs en tout ;
- réinitialise la valeur à 0 et recommence le cycle.
Une barre de progression en mode = "indeterminate" fait défiler une valeur de type int ( ), débutant toujours à 0 puis évolue de une unité, même après avoir atteins la valeur affectée à son attribut maximum, jusqu'à ce que le script :
- appel la méthode tkinter.ttk.Progressbar ( ).stop ( ) ;
- modifie la valeur de la variable de controle associée de la barre de progression.
import tkinter , tkinter.ttk
TKI_Principal = tkinter.Tk ( )
TKV_Cycle = tkinter.IntVar ( )
TKV_Continu = tkinter.IntVar ( )
BUT_Quitter = tkinter.Button ( TKI_Principal , text = "Quitter" , command = TKI_Principal.destroy )
WAI_Determinate = tkinter.ttk.Progressbar ( TKI_Principal , mode = "determinate" , variable = TKV_Cycle )
WAI_Indeterminate = tkinter.ttk.Progressbar ( TKI_Principal , mode = "indeterminate" , variable = TKV_Continu )
LAB_Determinate = tkinter.Label ( TKI_Principal , textvariable = TKV_Cycle )
LAB_Indeterminate = tkinter.Label ( TKI_Principal , textvariable = TKV_Continu )
tkinter.Label ( TKI_Principal , text = "determinate : " ).grid ( row = 0 , column = 0 , sticky = "e" )
WAI_Determinate.grid ( row = 0 , column = 1 , sticky = "nsw" )
LAB_Determinate.grid ( row = 0 , column = 2 , sticky = "nsw" )
tkinter.Label ( TKI_Principal , text = "indeterminate : " ).grid ( row = 1 , column = 0 , sticky = "nes" )
WAI_Indeterminate.grid ( row = 1 , column = 1 , sticky = "nsw" )
LAB_Indeterminate.grid ( row = 1 , column = 2 , sticky = "nsw" )
BUT_Quitter.grid ( row = 2 , column = 0 , columnspan = 3 , sticky = "nesw" )
WAI_Determinate.start ( 25 )
WAI_Indeterminate.start ( 25 )
TKI_Principal.mainloop ( )
UTILISATION D'UNE BARRE DE PROGRESSION.
La méthode tkinter.ttk.Progressbar ( ).start ( ) permet de lancer la progression de la valeur, ou de la relancer si la barre de progression était en pause, il est possible de lui fournir un paramètre pour indique le temps, en milliseconde, à attendre avant de passer à la valeur suivante.
La méthode tkinter.ttk.Progressbar ( ).stop ( ) met l'avancement de la barre de progression en pause, sans la remettre à 0. Le redémarrage de la barre de progression se fera à la valeur qu'elle avait atteinte au moment de l'appel de la méthode tkinter.ttk.Progressbar ( ).stop ( ).
Pour forcer la barre de progression à 0, ou à n'importe quelle valeur valide, il faut lui assoccier une variable de controle avec son attribut variable, et modifier la valeur cette variable de controle.
import tkinter , tkinter.ttk
def FNC_Arreter ( ) :
WAI_Progression.stop ( )
BUT_Lancer [ "state" ] = "normal"
def FNC_Calcul ( *event ) :
kcalcul = SCA_Table.get ( ) * TKV_Progression.get ( )
LAB_Calcul [ "text" ] = f"{ SCA_Table.get ( ) } x { TKV_Progression.get ( ) } = { kcalcul }"
def FNC_Lancer ( ) :
WAI_Progression.start ( 250 )
BUT_Lancer [ "state" ] = "disabled"
def FNC_Retour ( ) :
TKV_Progression.set ( 0 )
TKI_Principal = tkinter.Tk ( )
TKV_Progression = tkinter.IntVar ( )
BUT_Quitter = tkinter.Button ( TKI_Principal , text = "Quitter" , command = TKI_Principal.destroy )
BUT_Lancer = tkinter.Button ( TKI_Principal , text = "Lancer" , command = FNC_Lancer )
BUT_Stopper = tkinter.Button ( TKI_Principal , text = "Arreter" , command = FNC_Arreter )
BUT_Raz = tkinter.Button ( TKI_Principal , text = "R.A.Z." , command = FNC_Retour )
SCA_Table = tkinter.Scale ( TKI_Principal , orient = "horizontal" , to = 25 )
WAI_Progression = tkinter.ttk.Progressbar ( TKI_Principal , variable = TKV_Progression , length = 200 )
LAB_Calcul = tkinter.Label ( TKI_Principal )
tkinter.Label ( TKI_Principal , text = "Table : " ).grid ( row = 0 , column = 0 , columnspan = 2 , sticky = "w" )
SCA_Table.grid ( row = 0 , column = 1 , columnspan = 2 , sticky = "nesw" )
LAB_Calcul.grid ( row = 1 , column = 0 , columnspan = 3 , sticky = "nesw" )
WAI_Progression.grid ( row = 2 , column = 0 , columnspan = 3 , sticky = "nesw" )
BUT_Lancer.grid ( row = 4 , column = 0 , sticky = "nesw" )
BUT_Stopper.grid ( row = 4 , column = 1 , sticky = "nesw" )
BUT_Raz.grid ( row = 4 , column = 2 , sticky = "nesw" )
BUT_Quitter.grid ( row = 5 , column = 0 , columnspan = 3 , sticky = "nesw" )
TKV_Progression.trace ( "w" , FNC_Calcul )
TKI_Principal.mainloop ( )
CONTROLER UNE BARRE DE PROGRESSION.
Les barres de progression ne disposent pas de méthode, appelée automatiquement, quand elle atteint sa valeur maximum. Afin d'éviter que celle-ci ne redémarre indéfiniment, il faut donc prévoir une façon de tester, à chaque nouvelle valeur de la barre de progression, son état avec la méthode tkinter.wait_variable ( ) et une variable de contrôle tkinter.IntVar( ), par exemple :
import tkinter , tkinter.ttk
def FNC_Depart ( ) :
WAI_Test.start ( 20 )
BUT_Depart [ "state" ] = "disabled"
FNC_Fin ( )
def FNC_Fin ( ) :
TKI_Principal.wait_variable ( TKV_Progression )
if TKV_Progression.get ( ) > 48 :
WAI_Test.stop ( )
LAB_Valeur [ "text" ] = "Traitement terminé !"
BUT_Depart [ "state" ] = "normal"
else :
LAB_Valeur [ "text" ] = TKV_Progression.get ( )
FNC_Fin ( )
TKI_Principal = tkinter.Tk ( )
TKV_Progression = tkinter.IntVar ( )
BUT_Quitter = tkinter.Button ( TKI_Principal , text = "Quitter" , command = TKI_Principal.destroy )
BUT_Depart = tkinter.Button ( TKI_Principal , text = "Lancer" , command = FNC_Depart )
WAI_Test = tkinter.ttk.Progressbar ( TKI_Principal , variable = TKV_Progression , maximum = 50 )
LAB_Valeur = tkinter.Label ( TKI_Principal )
LAB_Valeur.pack ( )
WAI_Test.pack ( )
BUT_Depart.pack ( )
BUT_Quitter.pack ( )
TKI_Principal.mainloop ( )
Votre aide est précieuse pour améliorer ce site, alors n'hésitez pas à faire part de