Progress bar pour tkinter

Soyez le premier à donner votre avis sur cette source.

Vue 14 807 fois - Téléchargée 984 fois

Description

Widget barre de progression pour Tkinter.
Entièrement paramétrable:
-Taille (longueur et largeur)
-Couleur de la barre (fixe ou variable)
-Couleur du fond

Source / Exemple :


# -*- coding: cp1252 -*-
#Progress Bars
#Ecrit et développé par Amaury

from Tkinter import *
import time

class ProgressBar(Canvas):
    
    def __init__(self,parent,largeur,hauteur,color):
        
        global root,valeur,larg,haut,coul,txt,old,rainbow
        
        root=parent
        larg=largeur
        coul=color
        haut=hauteur
        rainbow=False
                
        Canvas.__init__(self)

        self.configure(height=hauteur,width=largeur+40)
        self.create_rectangle(0,0,largeur,hauteur,fill="Tan",outline="AntiqueWhite")
        old=self.create_rectangle(3,3,3,18,fill=color,outline=color)
        txt=self.create_text(largeur+20,hauteur/2,text="0 %")

        valeur=0

    def SetValue(self,consigne):
        
        global root,valeur,larg,color,txt,old,rainbow,haut

        while (int(valeur*100+.5)!=int(consigne*100+.5)):
            if (valeur<consigne):
                valeur=valeur+(float(consigne-valeur)/50)
                float (valeur)
                self.delete(old)
                self.delete(txt)
                txt=self.create_text(larg+20,haut/2,text=str(int(valeur))+" %")
                longueur=(valeur/100)*larg
                
                if (rainbow==False):
                    couleur=coul
                else:
                    if (valeur<51):
                        col=5.11*valeur
                        if len(hex(int(col))[2:])==2:
                            code=str(hex(int(col))[2:])+"ff00"
                        elif len(hex(int(col))[2:])==1:
                            code="0"+str(hex(int(col))[2:])+"ff00"
                        elif len(hex(int(col))[2:])==1 and int(valeur)==0:
                            code="00ff00"
                        else:
                            code="ffff00"

                    elif (valeur>50):
                        col=255-5.11*(valeur-50)
                        if len(hex(int(col))[2:])==2:
                            code="ff"+str(hex(int(col))[2:])+"00"
                        elif len(hex(int(col))[2:])==1:
                            code="ff0"+str(hex(int(col))[2:])+"00"
                        else:
                            code="ff0000"
                        
                    couleur="#"+code
                    
                old=self.create_rectangle(2,2,longueur,haut-2,fill=couleur,outline=couleur)
                root.update()
                time.sleep(0.002) #Définie l'inertie de l'aiguille (Timer)
                
                
            elif(valeur>consigne):
                valeur=valeur+(float(consigne-valeur)/50)
                float (valeur)
                self.delete(old)
                self.delete(txt)
                txt=self.create_text(larg+20,haut/2,text=str(int(valeur))+" %")
                longueur=(valeur/100)*larg
                
                if (rainbow==False):
                    couleur=coul
                else:
                    if (valeur<51):
                        col=5.11*valeur
                        if len(hex(int(col))[2:])==2:
                            code=str(hex(int(col))[2:])+"ff00"
                        elif len(hex(int(col))[2:])==1:
                            code="0"+str(hex(int(col))[2:])+"ff00"
                        elif len(hex(int(col))[2:])==1 and int(valeur)==0:
                            code="00ff00"
                        else:
                            code="ffff00"

                    elif (valeur>50):
                        col=255-5.11*(valeur-50)
                        if len(hex(int(col))[2:])==2:
                            code="ff"+str(hex(int(col))[2:])+"00"
                        elif len(hex(int(col))[2:])==1:
                            code="ff0"+str(hex(int(col))[2:])+"00"
                        else:
                            code="ff0000"
                        
                    couleur="#"+code
                    

                old=self.create_rectangle(2,2,longueur,haut-2,fill=couleur,outline=couleur)
                root.update()
                time.sleep(0.002) #Définie l'inertie de l'aiguille (Timer)
            
                
            else:
                float (valeur)
                self.delete(old)
                self.delete(txt)
                txt=self.create_text(larg+20,haut/2,text=str(int(valeur))+" %")
                longueur=(valeur/100)*larg
                
                if (rainbow==False):
                    couleur=coul
                else:
                    if (valeur<51):
                        col=5.11*valeur
                        if len(hex(int(col))[2:])==2:
                            code=str(hex(int(col))[2:])+"ff00"
                        elif len(hex(int(col))[2:])==1:
                            code="0"+str(hex(int(col))[2:])+"ff00"
                        elif len(hex(int(col))[2:])==1 and int(valeur)==0:
                            code="00ff00"
                        else:
                            code="ffff00"

                    elif (valeur>50):
                        col=255-5.11*(valeur-50)
                        if len(hex(int(col))[2:])==2:
                            code="ff"+str(hex(int(col))[2:])+"00"
                        elif len(hex(int(col))[2:])==1:
                            code="ff0"+str(hex(int(col))[2:])+"00"
                        else:
                            code="ff0000"
                        
                    couleur="#"+code
                    
                txt=self.create_text(larg+20,haut/2,text=str(int(valeur))+" %")
                old=self.create_rectangle(2,2,longueur,haut-2,fill=couleur,outline=couleur)
                root.update()
                time.sleep(0.002) #Définie l'inertie de l'aiguille (Timer)

    def OnRainbow(self):
            
        global rainbow

        rainbow=True

    def SetColor(self,couleur):

        global rainbow,color

        rainbow=False
        color=couleur

    def SetBackgroundColor(couleur):

        global haut,larg

        self.create_rectangle(0,0,larg,haut,fill=couleur,outline=couleur)

Conclusion :


Un afficheur simple mais inexistant dans Tkinter.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Bonjour
Je soueterai auci avoir un éclaircissement sur se code.
Merci
Messages postés
15
Date d'inscription
mardi 3 mars 2009
Statut
Membre
Dernière intervention
26 juin 2009

Bonjour,

Je suis très intéressé par ce code! Peux tu me donner des explications sur son utilisation?

Cordialement,

ps : je connais très peu python
>
Messages postés
15
Date d'inscription
mardi 3 mars 2009
Statut
Membre
Dernière intervention
26 juin 2009

Bonjour
A tu hu des explication sur se code?
Merci
Messages postés
9
Date d'inscription
samedi 2 juin 2007
Statut
Membre
Dernière intervention
3 juin 2009

Il y a quelques temps je me suis fait une "progresse barre" aussi.
J'ai une petite remarque a propos de ton code (d'ailleurs tu as fait la même chose pour ton autre source avec les widgets) !!
Tu utilises les classes c'est bien mais a la place déclarer toutes tes variable global comme ca, il te suffit des mettre un "self." devant tes variables.
A part ça je n'ai pas encore vraiment regardé le code.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.