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 :

Création et réutilisation de widget [QtGui]


Sujet :

PyQt Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Consultant E-Business
    Inscrit en
    Mai 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant E-Business

    Informations forums :
    Inscription : Mai 2007
    Messages : 39
    Par défaut Création et réutilisation de widget
    Bonjour,

    Mon problème me paraît très simple en théorie mais je n'ai pas trouvé de réponse satisfaisante en fouillant sur le web, du moins assez claire.

    1)
    J'ai créé avec QtDesigner une MainWindow, dans laquelle j'ai laissé un widget vide que j'aimerai remplir en fonction de l'étape courante (en gros cliquer sur un bouton "suivant" met à jour le contenu du widget).

    2)
    J'ai créé des widgets à part entière (File->New->Template\Forms->Widget).

    Ce que je voudrais donc faire, c'est générer les classes des widgets du point 2).
    Le problème est que pyuic génère des classes qui ne possèdent pas d'init et Cie. Je ne vois donc pas comment me servir de mes Widgets comme on le ferait avec les Widgets de base de QT.

    Ce que j'aimerais faire dans la classe de ma main frame:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    monWidget = MonWidget()
    self.emptyWidgetLayout.addWidget(monWidget)
    Quelqu'un aurait-il une explication simple et générique?

    Merci,
    Quentin

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    Pour intégrer une UI créer avec QtDesigner, il faut la coller à une classe dérivée de Qt via délégation ou héritage multiple tel que documenté, par exemple, chez Riverbanks: Using Qt Designer

    Cela fait, vous devriez avoir répondu à votre question. Ou la reformuler en fonction de ce que çà ne fait pas.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre averti
    Profil pro
    Consultant E-Business
    Inscrit en
    Mai 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant E-Business

    Informations forums :
    Inscription : Mai 2007
    Messages : 39
    Par défaut
    Wahou, j'ai compris. On mettra ça sur le compte de la fatigue...

    Un grand merci.
    Quentin

  4. #4
    Membre averti
    Profil pro
    Consultant E-Business
    Inscrit en
    Mai 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant E-Business

    Informations forums :
    Inscription : Mai 2007
    Messages : 39
    Par défaut
    J'ai tenté ça mais tien n'apparaît. Une idée??

    home_widget.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # -*- coding: iso-8859-15 -*-
     
    from PyQt4.QtGui import QWidget
    from home import Ui_Form
     
    class HomeWidget(QWidget, Ui_Form):
        def __init__(self):
            QWidget.__init__(self)
     
            # Set up the user interface from Designer.
            self.setupUi(self)
    main_window.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    [...]
    hw = HomeWidget()
    self.contentLayout.addWidget(self.contentWidget)
    [...]

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,
    Question bourrine: avez vous appelé .show quelque part?
    Sinon, il serait peut être intéressant de voir ce qui se cache derrière:
    self.emptyWidgetLayout.addWidget(monWidget)
    Après il y a peut être des questions côté "parent" widget: Qt fait plein de chose "automatiquement" mais des fois, il faut l'aider un peu.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Trouvé dans mes poubelles.
    J'ai une boîte i.e. un QFrame dans laquelle je mets une QVBoxLayout.
    Puis j'y empile un paquet de widgets (ici des QLabel mais peu importe, il pourrait être des amalgames issus de QtDesigner).
    Les méthodes append/insert/remove font de la chose une "VBoxAsList".

    Note: je n'ai pas trouvé comment faire cela simplement avec un QListWidget

    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
    from PyQt4.QtGui import *
    from PyQt4.QtCore import *
     
    class VBoxAsList(QFrame):
        def __init__(self, parent=None):
            super(VBoxAsList, self).__init__(parent=parent)
            self._vbox = QVBoxLayout(self) # the VBox
     
        def append(self, widget):
            self._vbox.addWidget(widget)
     
        def insert(self, index, widget):
            self._vbox.insertWidget(index, widget)
     
        def remove(self, index):
            w = self._vbox.takeAt(index).widget()
            w.hide()
            return w
     
    if __name__ == "__main__":
        import sys
        app = QApplication(sys.argv)
     
        widget = QWidget()
        vboxAsList = VBoxAsList(widget)
     
        def add_widgets(count):
            for x in range(count):
                text = 'label-%d' % x
                label = QLabel(text, parent=vboxAsList)
                print 'created label: parent = ', label.parent()
                vboxAsList.insert(0, label)
     
        add_widgets(4)
        w = vboxAsList.remove(1)
        print 'removed: parent=', w.parent()
        widget.show()
        app.exec_()
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

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

Discussions similaires

  1. Réponses: 18
    Dernier message: 05/06/2013, 12h12
  2. création d'un custom widget
    Par telemarker05 dans le forum Qt
    Réponses: 4
    Dernier message: 25/10/2009, 18h22

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