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 :

Affichage d'une simulation sous PyQt4 [QtGui]


Sujet :

PyQt Python

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2016
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2016
    Messages : 103
    Points : 103
    Points
    103
    Par défaut Affichage d'une simulation sous PyQt4
    Bonjour à tous ,

    dans le cadre de mon projet logiciel, j'en suis à la phase de réalisation de l'interface graphique.

    J'ai déjà commencé à coder et je commence à obtenir quelque chose de sympathique. Mais je reste encore 'novice' sous Qt4 et il y a beaucoup de choses à savoir et il est très facile de faire

    fausse route. Dans mon IHM, j'ai plein de boutons, des TableView, TreeView...etc. Par la suite, j'ai créé un bouton 'Simulation'. Donc, lorsque l'utilisateur clique dessus, on lance bien la simulation

    désirée. Mais elle s'affiche dans une fenêtre à part. Hors, ce que je cherche à faire, ça serait de rajouter un 'cadre' à mon IHM où la simulation s'afficherait ; et non à l'extérieur.

    J'espère avoir été clair en tout

    Merci d'avance à vous tous pour vos remarques et suggestions

    Cordialement,

    KM

  2. #2
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    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 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Ce n'est pas très compliqué de faire ça, à part que c'est plus facile quand on fait ça depuis le départ.

    Voilà le principe:

    - On a une fenêtre QWidget ou QMainWindow.

    - On met dedans un QGridLayout

    - On met 2 objets dans le QGridLayout: un QFrame et le Widget graphique nécessaire à la simulation.

    - On force le QFrame à avoir une hauteur fixe en pixels

    - On positionne tous les widgets de communication et d'action dans le QFrame.

    L'avantage, c'est qu'on peut ou non permettre le redimensionnement de la fenêtre. On peut en plus fixer une taille horizontale mini pour éviter de masquer les widgets du QFrame.


    J'utilise souvent cette technique, non pour la simulation, mais pour afficher des messages qui tracent le déroulement d'une opération complexe et en donnent les résultats avec un QTextEdit.

    Et je fais ça le plus souvent avec QtDesigner.
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2016
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2016
    Messages : 103
    Points : 103
    Points
    103
    Par défaut Affichage d'une simulation sous PyQt4 - 2
    Bonjour tyrtamos.

    Merci pour les indications.

    Je vais faire un essai.

    Cordialement,

    KM

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2016
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2016
    Messages : 103
    Points : 103
    Points
    103
    Par défaut Affichage d'une simulation sous PyQt4 - 2 - 1
    Re-bonjour ,

    si j'écris un truc de la sorte :

    [CODE=PYTHON]

    class toto(QWidget):

    def __init__(self,parent=None):
    super(toto,self).__init__(parent)
    self.layout = QGridLayout()
    self.browser = QLabel()
    self.layout.addWidget(self.browser)
    self.bout1 = QPushButton("titi")
    self.layout.addWidget(self.bout1)
    self.connect(self.bout1,SIGNAL('clicked()'),self.afficheSimulation)
    self.setLayout(self.layout)

    def afficheSimulation(self):
    self.browser.setPixmap(QPixmap(self.simulation.Graphe()))

    [CODE=PYTHON]

    Mais apparemment, ce n'est pas la solution adéquate . L'affichage lancée par la méthode Graphe() se trouve toujours en dehors de mon IHM.

    Le 'hic' ce que je ne dois pas afficher une image que je récupère d'un dossier particulier.

    Mais je dois le faire en temps réel et intégrer l'affichage de la méthode Graphe() dans l'IHM dés que l'utilisateur clique sur le bouton adéquate.

    Sinon, comme on me l'a suggéré de faire en plusieurs étapes : 1 - lancer Graphe() ; 2 - enregistrer l'image retournée automatiquement dans le bon dossier ; 3 - récupérer l'image correspondante

    et l'intégrer dans l'IHM. Je n'y avais pas pensé en effet. Même, si je préférais ne pas passer par tout ce chemin qui me semble peu 'agile'.

    Merci pour votre retour.

    Cordialement,

    KM

  5. #5
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    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 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    Le code que tu montres est assez éloigné de ce que j'ai crus dire, et donc je me demande si j'ai été assez clair.

    Aussi, voilà un petit code qui illustre la méthode que j'utilise. C'est en PyQt5, mais il devrait suffire de remplacer QtWidgets par QtGui (et, bien sûr, PyQt5 par PyQt4).

    On voit bien dans la fenêtre la partie supérieure avec les 2 boutons et la partie inférieure colorée en jaune.

    Et on comprend mieux la hauteur fixe du panneau supérieur quand on redimensionne à la souris.

    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    # Python 3 PyQt5
     
    import sys
    from PyQt5 import QtWidgets, QtCore
    # from PyQt4 import QtGui, QtCore
     
    #############################################################################
    class Fenetre(QtWidgets.QWidget):
     
        #========================================================================
        def __init__(self, parent=None):
            super(Fenetre, self).__init__(parent)
            self.resize(400,400)
     
            self.panneau = QtWidgets.QFrame(self)
            self.panneau.setFixedHeight(200)
     
            self.bouton1 = QtWidgets.QPushButton("bouton 1", self.panneau)
            self.bouton1.setGeometry(0,0,100,30)
            self.bouton1.clicked.connect(self.clictest1)
     
            self.bouton2 = QtWidgets.QPushButton("bouton 2", self.panneau)
            self.bouton2.setGeometry(0,100,100,30)
            self.bouton2.clicked.connect(self.clictest2)
     
            self.graphe = QtWidgets.QLabel(self)
            self.graphe.setStyleSheet("background-color:yellow") # pour distinguer la partie graphique
     
            posit = QtWidgets.QGridLayout()
            posit.addWidget(self.panneau, 0, 0)
            posit.addWidget(self.graphe, 1, 0)
            self.setLayout(posit)
     
        #========================================================================
        @QtCore.pyqtSlot()
        def clictest1(self):
            print("clic bouton1")
     
        #========================================================================
        @QtCore.pyqtSlot()
        def clictest2(self):
            print("clic bouton2")
     
    #############################################################################
    if __name__ == "__main__":
        app = QtWidgets.QApplication(sys.argv)
        fen = Fenetre()
        fen.setAttribute(QtCore.Qt.WA_DeleteOnClose)
        fen.show()
        sys.exit(app.exec_())
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  6. #6
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2016
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2016
    Messages : 103
    Points : 103
    Points
    103
    Par défaut Affichage suite...
    Bonsoir Tyrtamos, et merci.

    J'ai testé oui c'est ce que j'avais déjà fait auparavant à peu près. Mais mon problème est beaucoup plus fin que ça je pense. Peut-être me suis-je pas bien exprimé

    Alors je recommence :

    Ma fonction Graphe() retourne l'affichage de ma courbe. Cette courbe qui est renvoyé je dois l'insérer dans mon IHM.

    Sinon, j'aimerais savoir quand je lance la méthode graphe s'il est possible d'enregistrer automatiquement la figure renvoyée. J'ai déjà pas mal potasser sur ça aujourd'hui, essayer plusieurs façon

    avec le module PIL etc etc...je pense que mettre un bout de code sera plus explicite.

    Bonne soirée

    KM

  7. #7
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2016
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2016
    Messages : 103
    Points : 103
    Points
    103
    Par défaut Affichage la suite de la suite...le suspens reste entier^^
    Bonjour bonjour ,

    je perds la tête

    Je reviens vers vous en désespoirs de cause. Mais je commence à m'arracher les cheveux . Donc je me ré-explique en espérant être beaucoup plus clair.

    J'ai une première classe appelons la class toto qui s'occupe de l'affichage de ma simulation et ma class titi qui gére l'interface graphique .

    Mon but premier était lorsque je clique sur un bouton 'simulation' d'intégrer l'affichage de la simulation renvoyée par la class toto via la méthode Graphe et l'intégrer dans mon interface via

    la class titi.

    Je suis passé par des QLabel, des setPixmap() etc ....Quoique je fasse l'affichage de la simulation se fait toujours à l'extérieur. Je n'arrive pas à exprimer le fait de dire mettre l'image générer

    automatiquement par la méthode Graphe dans un QLabel(ou autre) de la class titi et que la simulation s'affiche une et une uniquement fois et uniquement de le QWidget dédié...je n'arrive pas à

    bien exprimer ce lien...

    Je suis à l'écoute de toutes proposition

    Merci à tous !!!

    KM

  8. #8
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2016
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2016
    Messages : 103
    Points : 103
    Points
    103
    Par défaut Affichage - Une autre question d'importance
    Sinon, je pensais à faire comme on me l'avait suggéré : enregistrer l'image obtenue par la méthode Graphe() puis récupérer l'image générée et l'intégrer à mon IHM.

    Sur le papier ça a l'air très simple dit comme cela. Cependant, ce n'est pas si évident.

    En effet, j'ai plusieurs difficultés : 1- Comment enregistrer automatiquement un image : même si je fais : image.save(self.toto.Graphe()) d'une part l'affichage se fait et d'autre part aucune image

    n'a été enregistrée évidement, ce que je veux c'est pouvoir enregistrer l'image générée sans qu'on cliquer sur l'icône 'register' mais que ça se fasse tout seul...

    Je suis complètement perdu pour le coup.

    Merci à tous.

    Cordialement,

    KM

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 22/02/2008, 19h22
  2. [MySQL] Affichage d'une table sous forme d'un tableau via PHP
    Par CYCLOPE91440 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 16/01/2007, 20h25
  3. Réponses: 10
    Dernier message: 12/07/2006, 12h42
  4. pb affichage d'une page sous linux
    Par fessebleu dans le forum Langage
    Réponses: 6
    Dernier message: 27/09/2005, 15h05
  5. Affichage d'une image sous linux
    Par Braim dans le forum x86 32-bits / 64-bits
    Réponses: 5
    Dernier message: 25/03/2003, 11h41

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