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

GUI Python Discussion :

Calcul itératif et affichage


Sujet :

GUI Python

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2014
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Août 2014
    Messages : 40
    Points : 33
    Points
    33
    Par défaut Calcul itératif et affichage
    Bonjour,

    J'ai placé un calcul itératif dans une boucle while.

    Jusqu'à là rien de bien sorcier

    Néanmoins, je souhaite afficher dans une fenêtre à part le suivi du calcul. C'est à dire à l'itération 0, je veux qu'on puisse voir
    "Itération 0 en cours" et à la fin de "Itération 0 terminé avec succès".
    Par exemple pour avec avec 2 itération où tout s'est bien passé.

    "Itération 0 en cours"
    "Itération 0 terminé avec succès"
    "Itération 1 en cours"
    "Itération 1 terminé avec succès"
    "Itération 2 en cours"
    "Itération 2 terminé avec succès"


    Mais voilà je n'y arrive pas ! J'ai essayé de stocker les informations dans une liste et d'afficher le tout dans une textbox() d'easygui. Le problème avec cette méthode c'est que je dois cliquer sur "OK" pour qu'il passe à la suite... Pas terrible donc puisque je ne souhaite qu'un affichage.

    Merci pour votre aide !

  2. #2
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Teste ce bout de code et dis nous si c'est ce que tu veux:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    >>> def prog():
    ...     for i in range(20):
    ...             print "\rProgress ........... %s" % i,
    ...             sys.stdout.flush()
    ...             time.sleep(0.3)
    ... 
    >>> prog()

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2014
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Août 2014
    Messages : 40
    Points : 33
    Points
    33
    Par défaut
    Bonjour,

    Merci pour ta réponse !

    Néanmoins ce n'est pas exactement ça. Je souhaite afficher le message dans un boite externe (du type QtextBrowser ou textbox) et mettre à jour cette affichage après chaque itération de la boucle while.

    Donc en gros il faudrait que j'arrive à créer un fenêtre d'affichage pendant toute la durée de lancement de mon script python qui se met à jour au fur et à mesure de la boucle while à l'intérieur du script.
    De plus pour fermer la fenêtre il faudrait attendre que je clique sur la croix.

  4. #4
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Puisque tu parles de QTextBrowser allons y pour un exemple PyQt

    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
     
    # -*- coding: utf-8 -*-
     
    import sys
    import time
    from PyQt4 import QtCore, QtGui
     
    class ProgressDialog(QtGui.QDialog):
        def __init__(self):
            super(ProgressDialog, self).__init__()
            self.resize(120, 50)
            self.gridLayout = QtGui.QGridLayout(self)
            self.label = QtGui.QLabel(self)
            self.gridLayout.addWidget(self.label, 0, 0, 1, 1)
     
    def main():
        app = QtGui.QApplication(sys.argv)
        dial = ProgressDialog()
        dial.show()
        for i in range(20):
            dial.label.setText('Progress .......... %s' % i)
            QtCore.QCoreApplication.processEvents()
            time.sleep(0.2)
        dial.accept()
     
     
    if __name__ == "__main__":
        main()

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2014
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Août 2014
    Messages : 40
    Points : 33
    Points
    33
    Par défaut
    Ok merci, j'ai ré adapté ton code et je l'ai placé dans Test.py

    Comment puis-je faire pour que le Qtextbrowser soit de la même taille que la frame principale ? Et que lorsque je modifie la taille de la frame principal Qtext s'adapte ?

    Comment puis-je ensuite utiliser ce code dans Testboucle.py (le code qui fais ma boucle while) pour qu'a chaque itération il mette à jour la QtextBrowser ? La manière dont je l'ai fais ça donne rien xD

    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
    import sys
    import time
    from PyQt4 import QtCore, QtGui
    try:
        _fromUtf8 = QtCore.QString.fromUtf8
    except AttributeError:
        _fromUtf8 = lambda s: s
     
    class ProgressDialog(QtGui.QDialog):
        def __init__(self):
            super(ProgressDialog, self).__init__()
            self.resize(645, 400)
            self.centralwidget = QtGui.QWidget(self)
            self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
            self.horizontalLayout = QtGui.QHBoxLayout(self.centralwidget)
            self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout"))
            self.resume = QtGui.QTextBrowser(self.centralwidget)
            self.resume.setObjectName(_fromUtf8("resume"))
            self.horizontalLayout.addWidget(self.resume)
     
     
     
    def main(text):
        app = QtGui.QApplication(sys.argv)
        dial = ProgressDialog()
        dial.show()
        for i in range(0, 10):
            dial.resume.append(text)
            QtCore.QCoreApplication.processEvents()
            time.sleep(0.2)
        dial.accept()
     
     
    if __name__ == "__main__":
        text="texte"
        main(text)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    from Test import main
     
    i=0  
    while not (i==20):
        i+=1
        texte=" On écrit i "+str(i)
        main(texte)

  6. #6
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Tu lance deux boucles là.

    Lorsque tu appelles la fonction main() tu recrées une nouvelle fenêtre à chaque fois.

    Enlève la fonction main() du premier fichier et dans ton deuxième fichier tu dois avoir quelque chose comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        dial = ProgressDialog()
        dial.show()
        Pour chaque calcul iteratif:
            calcul
            append du nouveau texte dans dial.resume
    n'oublie pas que tu dois créer une QApplication avant toute chose et que tu auras sûrement besoin de rajouter QtCore.QCoreApplication.processEvents() pour que l'affichage soit en temps réel.


    Autre chose, ce sont les QMainWindow qui nécessitent un centralWidget pas les dialogues, si tu fais simplement, comme j'ai fait, un QGridLayout(self) ton QTextBrowser suivra le redimensionnement.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2014
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Août 2014
    Messages : 40
    Points : 33
    Points
    33
    Par défaut
    Donc en fait mon 1er fichier ne sert à rien ?
    Aucun moyen d'avoir le calcul dans un autre script ? Parce que ça devient vite illisible si je dois tout mettre dans le script d'affichage

    Edit : c'est bon j'ai mis la boucle de calcul dans le script de création de fenêtre... c'est un peu moche mais bon ça marche merci !

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

Discussions similaires

  1. [MySQL] erreur de calcul ou d'affichage des résultats
    Par abdou monta dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 19/05/2013, 13h09
  2. Problème de calcul et d'affichage de nombres réels
    Par Luke spywoker dans le forum Débuter
    Réponses: 19
    Dernier message: 28/02/2013, 11h27
  3. Besoin de faire un calcul itératif enfin je crois
    Par nap75 dans le forum Requêtes et SQL.
    Réponses: 22
    Dernier message: 31/10/2012, 00h26
  4. API schneider : Calcul itératif sur flottants
    Par bendangers dans le forum Automation
    Réponses: 1
    Dernier message: 31/10/2009, 17h13
  5. Réponses: 3
    Dernier message: 05/05/2007, 09h12

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