Python Tkinter ProgressBar
Répondre à la discussion
Affichage des résultats 1 à 4 sur 4

Python Tkinter ProgressBar



  1. #1
    babaorrhum

    Python Tkinter ProgressBar


    ------

    Bonjour,
    Je dois réaliser un projet python pour mon école et je dois utiliser tkinter.
    Pour mon projet, je dois afficher deux progressbar dans une même fenêtre tkinter.
    Mais le problème est que, les deux progressbar sont dépendantes l'une de l'autre (code à l'appui).
    Quand je fais avancer la 1er progressbar, la seconde avance également et pareil pour le texte, si je change le text de la 1er, la 2nd prend le même text.
    Je ne sais pas du tout comment faire, j'ai cherché partout sur internet, mon prof ne sait pas non plus.
    J'ai déjà essayer de faire une fonction qui dépend d'un indice n, des coordonnées (x,y), j'ai aussi essayé de faire deux fonctions séparé (progression_barre_1 et progression_barre_2).
    Pouvez-vous m'aider?
    Merci beaucoup,
    Baptiste Lemaire


    Code:
    from tkinter import *
    import time
    
    def prog():
        for i in range(0,11):
            time.sleep(0.1)
            p1.step(100/10)
            txt=str(i)+'/'+str(10)
            s1.configure("LabeledProgressbar", text=txt)
            fn.update()
            
        for i in range(0,16):
            time.sleep(0.1)
            p2.step(100/15)
            txt=str(i)+'/'+str(15)
                #print(txt)
            s2.configure("LabeledProgressbar", text=txt)
            fn.update()
    
    fn = Tk()
    fn.geometry("500x300+300+25")
    
    b1=Button(fn,text='progression',width=50,command=prog)
    b1.place(x=75,y=150)
    
    
    s1=Style(fn)
    s1.layout("LabeledProgressbar",
              [('LabeledProgressbar.trough',
               {'children': [('LabeledProgressbar.pbar',
                              {'side': 'left', 'sticky': 'ns'}),
                             ("LabeledProgressbar.label",
                              {"sticky": ""})],
               'sticky': 'nswe'})])
    p1 = Progressbar(fn, orient="horizontal", length=300,style="LabeledProgressbar")
    p1.place(x=100,y=10)
        
    s2=Style(fn)
    s2.layout("LabeledProgressbar",
        [('LabeledProgressbar.trough',
        {'children': [('LabeledProgressbar.pbar',
                       {'side': 'left', 'sticky': 'ns'}),
                        ("LabeledProgressbar.label",
                         {"sticky": ""})],
        'sticky': 'nswe'})])
    p2 = Progressbar(fn, orient="horizontal", length=300,style="LabeledProgressbar")
    p2.place(x=100,y=90)
        
    fn.mainloop()

    -----

  2. #2
    Raptor71

    Re : Python Tkinter ProgressBar

    Salut,
    Je ne sais pas si ce que je vais te dire peut t'aider mais on ne sait jamais.
    Je n'ai pas totalement compris ton code (je ne connais pas les layouts)
    Je suis aussi en ISN et j'ai utilisé une ProgressBar pour un petit programme qui teste le niveau de sécurité du mot de passe
    J'ai créé la barre comme ceci
    Code:
    barre = tkinter.ttk.Progressbar(orient="horizontal", maximum=6, value=0)        #Création de la barre
    barre.grid(row=3, columnspan=3, sticky="ews", padx=30)      #Affichage de la barre
    Et ma fonction qui me permet de jouer avec la PB
    Code:
    #Fonction de d'actualisation de la barre de sécurité
    def updateBarre(nbConditionsRempli):
        #On reinitialise la barre ainsi que le compteur de point
        barre.config(value=0)
        nouvelleValeurBarre = 0
        #On crée un score pour estimer le niveau de sécurité du mot de passe
        if len(mdp.get())>=12:
            nouvelleValeurBarre+=2
        elif len(mdp.get())>=8:
            nouvelleValeurBarre+=1
        if nbConditionsRempli == 4:
            nouvelleValeurBarre+=2
        elif nbConditionsRempli >= 2:
            nouvelleValeurBarre+=1
        barre.config(value=nouvelleValeurBarre+mdpCommun())     #On actualise la barre avec le score calculer plus haut + le score retourné par mdpPeuCommun()
        #On actualise l'estimation du niveau de sécurité du mot de passe ainsi que son score sur 6
        niveauSecurite = int(barre.cget("value"))       #On va chercher la valeur de la barre (sur 6)
        #Ensuite on change le niveau d'estimation de securite, son score et la couleur de ceux-ci pour plus de lisibilité
        if niveauSecurite >=4:
            NiveauSecurite.config(text="{}/6".format(int(barre.cget("value"))), fg="green")
            estimationNiveauSecurite.config(text="Niveau de sécurité : Bon", fg="green")
        elif niveauSecurite>=2:
            NiveauSecurite.config(text="{}/6".format(int(barre.cget("value"))), fg="orange")
            estimationNiveauSecurite.config(text="Niveau de sécurité : Passable", fg="orange")
        else:
            NiveauSecurite.config(text="{}/6".format(int(barre.cget("value"))), fg="red")
            estimationNiveauSecurite.config(text="Niveau de sécurité : Mauvais", fg="red")
    Je vais donner plus d'explications :
    maximum correspond sur combien est la barre c'est a dire si elle va de 0 à 10 ou de 0 à 32, etc. Pour moi c'est de 0 à 6
    value correspond au remplissage/avancement de la barre c'est à dire que si cette variable est dans mon cas à 3 alors ma PB sera à moitié rempli
    Code:
    barre = tkinter.ttk.Progressbar(orient="horizontal", maximum=6, value=0)        #Création de la barre
    Pour intéragir avec la progression de ma barre je change son argument value (j'ai donnée son maximum (6) lors de la creation de la PB) avec cette ligne
    Code:
    barre.config(value=nouvelleValeurBarre+mdpCommun())     #On actualise la barre avec le score calculer plus haut + le score retourné par mdpPeuCommun()
    La somme de nouvelleValeurBarre+mdpCommun( ) est égal au maximum à 6 (puisque ma PB est divisé en 6 partie --> ce qui correspond au maximum de la PB) et au minumum à 0 car la PB ne peut pas descendre en dessous de 0
    Tu peut remplacer value par n'importe quel argument que tu veut changer dans ta PB

    Je vais aussi chercher l'avancement de la barre qui correspond a value :
    Code:
    niveauSecurite = int(barre.cget("value"))       #On va chercher la valeur de la barre (sur 6)
    Tu peut remplacer value par n'importe quel argument que tu veut récuperer dans ta PB

    Donc ce que je pensais dans ton cas, c'est de mettre un argument value sur tes 2 PB et ensuite d'intéragir avec celle-ci pour pouvoir récuperer à chaque fois la valeur d'une de tes barre pour ensuite faire un calcul pour augmenter ou réduire la progression de l'autre barre

    Je te joint le programme que j'ai fais, il est commenté d'un peu partout donc tu devrais t'y retrouver, sinon n'hesite pas.

    A bientôt
    Fichiers attachés Fichiers attachés

  3. #3
    goaoute

    Re : Python Tkinter ProgressBar

    Entre le "Tkinter" du titre et le: "tkinter" du code on ne sait pas sans le lancer si c'est du V2.7 ou du V3
    Et en le lançant sous V2.7 ça donne: "fn() undefined"

  4. #4
    Ikhar84
    Animateur Informatique

    Re : Python Tkinter ProgressBar

    L'approche entière est à revoir...

    Je ne connais pas TKinter mais voilà des remarques d'ordre général qui devrait faciliter les recherches dans les doc et manuels :

    Les progress bar, quel que soit le langage utilisé, sont gérés par leurs "attributs" (le nom peut changer en fonction du langage), en clair: la valeur minimale (qui peut être 0, un nombre négatif, positif), la valeur maximale (qui devrait logiquement être plus grande que la valeur minimale), et la valeur "actuelle" (souvent value).

    Il n'est jamais question de coordonnées (sauf pour placer le composant progress bar lui même...).

    Pour les labels (ou autre champ de type texte), je n'ai rien compris: un label n'est pas sensé être modifiable directement par l'utilisateur, mais quoi qu'il en soit, les champs texte possèdent aussi un attribut (value, Text, ...), il suffit d'affecter la valeur de cette attribut du premier au suivant, lors d'un evenement "change" du texte du premier...

    exemple de résultat d'une recherche rapide sur les attributs d'une progress bar (1er résultat Google).
    J'ai glissé Chef !

  5. A voir en vidéo sur Futura

Discussions similaires

  1. Python : Tkinter : tag et dictionnaire
    Par jilou125 dans le forum Programmation et langages, Algorithmique
    Réponses: 1
    Dernier message: 08/01/2019, 14h08
  2. Fractales en python avec tkinter
    Par henryallen dans le forum Programmation et langages, Algorithmique
    Réponses: 7
    Dernier message: 28/01/2018, 08h10
  3. Problème - Fenêtre Tkinter python
    Par Eroos dans le forum Programmation et langages, Algorithmique
    Réponses: 3
    Dernier message: 03/05/2017, 10h15
  4. Aide TKINTER Python
    Par raroum dans le forum Programmation et langages, Algorithmique
    Réponses: 0
    Dernier message: 22/04/2016, 20h42
  5. Python : pas moyen d'importer tkinter
    Par helium0xFF dans le forum Programmation et langages, Algorithmique
    Réponses: 1
    Dernier message: 10/09/2012, 13h26