IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Tkinter Python Discussion :

[Tkinter] Essai barre de progression, mais lenteurs d'éxécution [Fait]


Sujet :

Tkinter Python

  1. #1
    Membre averti
    Enseignant
    Inscrit en
    Avril 2006
    Messages
    31
    Détails du profil
    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2006
    Messages : 31
    Par défaut [Tkinter] Essai barre de progression, mais lenteurs d'éxécution
    Re,

    Voici un essai de barre de progression (je me répète, ... mais de nouveau merci à airod pour le coup de main dans un thread précédent) ... ça fonctionne bien, mais l'affichage est particulièrement lent à mon goût ! . N'y a-t-il pas une solution pour améliorer ça ?, en tous cas voici le bout de code (c'est juste un essai) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    #! /usr/bin/python
     
    from Tkinter import *
    root=Tk()
    root.geometry("510x100+0+0")
    f=Frame(root, height=28, width=412, bd=2, relief=GROOVE)
    f.place(x=46, y=60)
    c=Canvas(f, height=20, width=404, bg="white")
    c.place(x=1, y=1)
     
    listeESSAI=[0]*1000
     
    # CA MARCHE MAIS L'AFFICHAGE EST BEAUCOUP TROP LENT !!!
    for toto in range(len(listeESSAI)) :
    	calcPourcentage=((toto+1)*100)/len(listeESSAI)
    	c.update()
    	n1=0
    	while n1<=calcPourcentage*4 :
    		c.create_rectangle((n1, 1, 4+n1, 20), outline="white", fill="red", width=1)
    		n1=n1+4
     
    root.mainloop()
    Merci d'avance .

    a+

  2. #2
    Expert confirmé
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Par défaut
    Tu peux regarder du côté de tkinter3000
    http://effbot.org/zone/wck-progressbar.htm

  3. #3
    Membre éclairé
    Avatar de airod
    Homme Profil pro
    Gérant Associé, DMP Santé et Directeur technique
    Inscrit en
    Août 2004
    Messages
    767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Gérant Associé, DMP Santé et Directeur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 767
    Par défaut
    cher ami, ton probléme c'est que tu demande a ton programme de recalculer en permanence a partir de 0.

    CONSEIL POUR DEBUGGER.
    ecrit dans ta console les valeurs retour de tes variables et tu cherche là ou ca fonctionne pas comme tu le veux.

    Compare ton code: (légèrement modifier pour revoyer la valeur de n1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    #! /usr/bin/python
     
    from Tkinter import *
    root=Toplevel()
    root.geometry("510x100+0+0")
    f=Frame(root, height=28, width=412, bd=2, relief=GROOVE)
    f.place(x=46, y=60)
    c=Canvas(f, height=20, width=404, bg="white")
    c.place(x=1, y=1)
     
    listeESSAI=[0]*1000
     #CA MARCHE MAIS L'AFFICHAGE EST BEAUCOUP TROP LENT !!!
    for toto in range(len(listeESSAI)) :
        calcPourcentage=((toto+1)*100.0)/len(listeESSAI)
            c.update()
            n1=0
        while n1<=calcPourcentage*4 :
            c.create_rectangle((n1, 1, 4+n1, 20), outline="white",
                                       fill="red", width=1)
            n1=n1+4
            print n1,
     
    root.mainloop()
    avec celui là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    #! /usr/bin/python
     
    from Tkinter import *
    root=Toplevel()
    root.geometry("510x100+0+0")
    f=Frame(root, height=28, width=412, bd=2, relief=GROOVE)
    f.place(x=46, y=60)
    c=Canvas(f, height=20, width=404, bg="white")
    c.place(x=1, y=1)
     
    listeESSAI=[0]*10000000  ## NOTE LE CHANGEMENT DE VALEUR, sinon trop rapide
    n1=0
     
    for toto in range(len(listeESSAI)) :
        calcPourcentage=((toto+1)*100.0)/len(listeESSAI)
            c.update()
            n1=n1
        while n1<=calcPourcentage*4 :
            c.create_rectangle((n1, 1, 4+n1, 20), outline="white",
                                       fill="red", width=1)
            n1=n1+4
            print n1,
     
    root.mainloop()
    A+

  4. #4
    Membre émérite Avatar de sloshy
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2005
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 728
    Par défaut
    salut

    En beaucoup plus simple, modifie juste la valeur de cette ligne:
    Plus c'est grand, plus c'est long, plus c'est petit, plus c'est court ...

    Je précise néanmois que c'est la solution de facilité par rapport à ton code, que le fait de recompté à chaque fois à partir de zero semble un peux barbare

  5. #5
    Membre éclairé
    Avatar de airod
    Homme Profil pro
    Gérant Associé, DMP Santé et Directeur technique
    Inscrit en
    Août 2004
    Messages
    767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Gérant Associé, DMP Santé et Directeur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 767
    Par défaut
    pas d'accord avec toi Sloshy.

    listeESSAI représente là, l'ensemble des données que tu dois traiter.

    Exemple, si tu dois traiter 15 images ou 150000 images, le temps de traitement va varier, mais pas le calcul de ta barre de progression.
    Elle evoluera plus vite si tu as 150 images a traiter que pour les 150000.
    le probléme de pyprog était qu'il relancer le calcul de 0, alors que pour ne pas encombrer la mémoire il fallait relancer le calcul a partir de la derniére valeur de n1

    Tu vois ce que je veux dire!!!!

  6. #6
    Membre émérite Avatar de sloshy
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2005
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 728
    Par défaut
    Salut,

    Oui j'ai bien compris ce que tu voulais dire.
    J'ai interpreté sa question autrement (surement du à une lecture attive de ma pars)
    Pour moi, il voulait, de la maniere la plus simple, afficher la barre de progression plus vite.

    Effectivement, ta remarque est bien plus fondé et justifier que la mienne

  7. #7
    Membre averti
    Enseignant
    Inscrit en
    Avril 2006
    Messages
    31
    Détails du profil
    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2006
    Messages : 31
    Par défaut
    Citation Envoyé par airod
    cher ami, ton probléme c'est que tu demande a ton programme de recalculer en permanence a partir de 0.

    Compare ton code: (légèrement modifier pour revoyer la valeur de n1)
    ...
    Aie, aie, aie ... quel "cake" je fais sur ce coup-là, franchement j'ai honte ! !, ah quand j'm'y met moi ! ... ... .

    CONSEIL POUR DEBUGGER.
    ecrit dans ta console les valeurs retour de tes variables et tu cherche là ou ca fonctionne pas comme tu le veux.

    A+
    Ben oui, c'est ce que je fais assez régulièrement, mais là et bien j'ai pô fait ! .

    a+

  8. #8
    Membre éclairé
    Avatar de airod
    Homme Profil pro
    Gérant Associé, DMP Santé et Directeur technique
    Inscrit en
    Août 2004
    Messages
    767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Gérant Associé, DMP Santé et Directeur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 767
    Par défaut
    pyprog, tu permet que je me le garde sous le coude pour l'utiliser dans met prog....

    A+

  9. #9
    Expert confirmé
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Par défaut
    En fait, du côté de Tix, il y a un progressbar déjà implémenté: c'est le TixMeter ( http://tix.sourceforge.net/dist/curr...d/tixMeter.htm )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    import Tix
    root = Tix.Tk()
    meter = Tix.Meter(root, value=0.)
    meter.pack()
    def go():
        for i in range(10000):
            meter.config(value=float(i)/10000)
            meter.update()
     
    btn = Tix.Button(root, text = 'Go', command = go)
    btn.pack()
    root.mainloop()

  10. #10
    Membre averti
    Enseignant
    Inscrit en
    Avril 2006
    Messages
    31
    Détails du profil
    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2006
    Messages : 31
    Par défaut
    Citation Envoyé par airod
    pyprog, tu permet que je me le garde sous le coude pour l'utiliser dans met prog....

    A+
    Non, je vais déposer un brevet ... ... pas taper !, évidemment que tu peux l'utiliser (au contraire !) . Si j'ai voulu faire ça, c'est comme tu dois t'en douter, pour faire une barre de progression pour EKD . Au fait tu peux avoir une variante légèrement différente en mettant width=0 à la place de width=1 dans le create_rectangle .

    Je vais aussi regarder le lien que propose Guigui_ (justement je ne connais pas Tix), au fait Guigui_, connais-tu une doc très didactique sur Tix associé à Python et avec des copies d'écran des fenêtres ... et des exemples de codes simples à mettre en oeuvre ? .

    a+

  11. #11
    Expert confirmé
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Par défaut
    Citation Envoyé par pyprog
    Je vais aussi regarder le lien que propose Guigui_ (justement je ne connais pas Tix), au fait Guigui_, connais-tu une doc très didactique sur Tix associé à Python et avec des copies d'écran des fenêtres ... et des exemples de codes simples à mettre en oeuvre ? .

    a+
    Pour Tix, tu as déjà la doc ici ( http://tix.sourceforge.net/dist/curr...l/contents.htm ) qui te permet d'avoir tous les widgets de Tix et leur caractéristiqus et utilisations.
    ici, tu peux installer une série de code source qui te donne un exemple global de chaque widget. Ca s'appelle Page 2.3e( http://page.sourceforge.net/#Download )
    Une fois installé, dans le répertoire example, il y a les fichiers t1.py et t3.py qui propose une interface avec la panoplie des widgets (c'est un peu le foutoir mais cela donne un aperçu de ce qu'on peut faire)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Tkinter] Barre de progression
    Par Ecco59 dans le forum Tkinter
    Réponses: 11
    Dernier message: 28/08/2005, 10h52
  2. [VB.NET] Pb avec le bouton Annuler d'1 barre de progression
    Par dada1982 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 30/06/2004, 09h56
  3. Réponses: 12
    Dernier message: 27/05/2004, 00h13
  4. [DEBUTANT] Barre de progression
    Par pupupu dans le forum MFC
    Réponses: 4
    Dernier message: 18/01/2004, 16h47
  5. [web] Barre de Progression ASCII
    Par Red Bull dans le forum Web
    Réponses: 13
    Dernier message: 05/06/2003, 12h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo