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

PyQt Python Discussion :

progressbar mode chenille


Sujet :

PyQt Python

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 10
    Par défaut progressbar mode chenille
    Bonjour,

    Je cherche à faire une progressbar en mode chenille le temps qu'une autre fonction se termine.

    voici un exemple (inspiré par une autre question et qui n'est pas ce que je veux faire mais qui l'illustre bien):
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    import sys
    import time
     
    from PyQt5.QtWidgets import (QApplication, QDialog,
                                 QProgressBar, QPushButton)
     
    class Actions(QDialog):
        """
        Simple dialog that consists of a Progress Bar and a Button.
        Clicking on the button results in the start of a timer and
        updates the progress bar.
        """
        def __init__(self):
            super().__init__()
            self.initUI()
     
        def initUI(self):
            self.setWindowTitle('Progress Bar')
            self.progress = QProgressBar(self)
            self.progress.setGeometry(0, 0, 300, 25)
            self.progress.setMaximum(100)
            self.button = QPushButton('Start', self)
            self.button.move(0, 30)
            self.show()
     
            self.button.clicked.connect(self.onButtonClick)
     
        def onButtonClick(self):
            self.progress.setRange(0, 0)
            self.count()
     
        def count(self):
            i = 0
            for i in range(500):
                print(i)
                time.sleep(0.02)
     
    if __name__ == "__main__":
        app = QApplication(sys.argv)
        window = Actions()
        sys.exit(app.exec_())
    Je pensais que le mode chenille de la progressbar devait commencer suivi du comptage jusqu'à 500.
    En pratique le comptage s'effectue jusqu'à 500 et seulement ensuite le mode chenille se met en marche...
    => je ne comprends pas pourquoi ???
    Quelle erreur ai-je commise ?

    En vous remerciant d'avance pour vos lumières (la mienne fléchit un peu)

  2. #2
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Le mode "chenille" est fait pour les opérations dont on ne peut pas connaître la progression. Cela permet de dire à l'utilisateur que l'opération est "en-cours". On l'arrête seulement quand l'opération longue est arrêtée

    Pour obtenir ce mode, il faut mettre un mini et un maxi tous les 2 égaux à 0.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 10
    Par défaut
    Bonjour,

    Oui c'est bien ce que je veux: j'ai une fonction dont je ne peux prédire la durée (ici remplacée par un comptage).
    J'ai bien mis les valeurs à 0 en faisant: setRange(0,0)

    Ma question est l'ordre de déroulement des opérations qui ne correspond pas à l'ordre définit dans la programmation...
    Il doit y avoir quelque chose que je ne fais pas correctement.
    Mais quoi ???

  4. #4
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Ce problème est dû au fait que le rafraichissement de l'interface est relégué au second plan pour privilégier le processus en cours. Question de performance.

    En faisant ainsi tu verras ta progressBar démarrer avant ton processus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            self.progress.setRange(0, 0)
            QtCore.QCoreApplication.processEvents()
    Sans garantie toutefois que le mouvement de la progressBar soit fluide, si tu peux le faire, insère d'autres QCoreApplication.processEvents() dans ton process.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 10
    Par défaut
    Bonjour,

    Merci beaucoup pour ta réponse (ça faisait 2 jours que je cherchais une indication sur internet...)
    Effectivement la progressbar débute immédiatement mais elle ne bouge pas ou peu avant la fin du comptage.

    Merci encore car vraiment je ne comprenais pas où était le problème.

    Et y a-t-il une solution pour faire défiler une progressbar en mode chenille, de façon fluide, durant un processus de durée indéterminée ?

    Edit: en mettant cela dans un thread c'est possible.

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

Discussions similaires

  1. Le grand mode d'emploi du forum, à lire si vous souhaitez tout savoir !
    Par Anomaly dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 2
    Dernier message: 03/06/2013, 17h36
  2. [VB.NET 2005] Progressbar en mode marquee
    Par Aspic dans le forum Windows Forms
    Réponses: 4
    Dernier message: 13/11/2006, 17h44
  3. ProgressBar en mode marquee (durée inconnue)
    Par Tenguryu dans le forum C++Builder
    Réponses: 1
    Dernier message: 23/09/2006, 17h14
  4. Réponses: 17
    Dernier message: 17/10/2002, 20h06
  5. Passer en mode 800*600
    Par flavien tetart dans le forum Assembleur
    Réponses: 8
    Dernier message: 30/05/2002, 23h05

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