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 :

Comment créer un panneau (ou une liste) personnalisé? [QtGui]


Sujet :

PyQt Python

  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2012
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2012
    Messages : 6
    Points : 6
    Points
    6
    Par défaut Comment créer un panneau (ou une liste) personnalisé?
    Bonjour,

    Je suis un développer Python avec pas mal d'expérience. Spécifiquement, je travail pour développer des application pour le web.

    Récemment, je me suis intéressé à la développement des application (GUI) avec Python.

    Après avoir préformer beaucoup de recherche sur le sujet, j'ai voulu essayer de créer un panneau personnalisé avec des images spécifique, qui devrait contenir des petits sections des info (comme twitter) en fin pour obtenir une liste similaire aux ces que l'on trouve dans les forums, blogs etc. ;-)

    Ce que je veux, pour clarifier, est un un panneau qui défile et qui contient un widget spécial qui a donc deux labels et une image.

    Example:


    J'apprécie énormément tous explications que vous pouvez me supplier.

    Je vous remercie en avance,
    Cordialement.

  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,

    Un exemple basique:
    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
    # -*- coding: utf-8 -*-
     
    import sys
     
    from PyQt4 import QtCore, QtGui
     
    class ListPanel(QtGui.QWidget):
        def __init__(self, parent=None):
            super(ListPanel, self).__init__(parent)
            self.resize(300, 350)
            self.gridbox = QtGui.QGridLayout(self)
            self.gridbox.setMargin(0)
            self.scrollArea = QtGui.QScrollArea(self)
            self.scrollArea.setWidgetResizable(True)
            self.scrollContents = QtGui.QWidget(self.scrollArea)
            self.vbox = QtGui.QVBoxLayout(self.scrollContents)
            self.vbox.setContentsMargins(2, 0, 2, 0)
            self.vbox_2 = QtGui.QVBoxLayout()
     
            spacerItem = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, 
                                            QtGui.QSizePolicy.Expanding)
            self.vbox_2.addItem(spacerItem)
            self.vbox.addLayout(self.vbox_2)
            self.scrollArea.setWidget(self.scrollContents)
            self.gridbox.addWidget(self.scrollArea, 0, 0, 1, 1)
            self.items = []
     
        def add_item(self, name, title, icon=None):
            item = ListItem(self)
            item.name_lbl.setText(name)
            item.title_lbl.setText(title)
            if icon is not None:
                item.pict.setPixmap(QtGui.QPixmap(icon))
     
            self.vbox_2.insertWidget(len(self.items), item)
            self.items.append(item)
     
    class ListItem(QtGui.QWidget):
        def __init__(self, parent=None):
            super(ListItem, self).__init__(parent)
            self.hbox = QtGui.QHBoxLayout(self)
            self.hbox.setMargin(0)
            self.hbox_1 = QtGui.QHBoxLayout()
            self.pict = QtGui.QLabel(self)
            self.pict.setMaximumSize(QtCore.QSize(48, 48))
            self.hbox_1.addWidget(self.pict)
            self.vbox = QtGui.QVBoxLayout()
            self.name_lbl = QtGui.QLabel(self)
            self.vbox.addWidget(self.name_lbl)
            self.title_lbl = QtGui.QLabel(self)
            self.vbox.addWidget(self.title_lbl)
            self.hbox_1.addLayout(self.vbox)
            self.hbox.addLayout(self.hbox_1)
     
    def set_people():
        ui.add_item('C. Chaplin', 'Philosophe', 'chemin/icone')
        ui.add_item('G. Depardieu', 'Contribuable belge', 'chemin/icone')
     
    if __name__ == "__main__":
        app = QtGui.QApplication(sys.argv)
        ui = ListPanel()
        ui.show()
     
        # On crée deux items
        set_people()
     
        sys.exit(app.exec_())

  3. #3
    Futur Membre du Club
    Inscrit en
    Décembre 2012
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2012
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Merci beaucoup Vincent, ça déchire ! ;-)

    Citation Envoyé par VinsS Voir le message
    Salut,

    Un exemple basique:
    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
    # -*- coding: utf-8 -*-
     
    import sys
     
    from PyQt4 import QtCore, QtGui
     
    class ListPanel(QtGui.QWidget):
        def __init__(self, parent=None):
            super(ListPanel, self).__init__(parent)
            self.resize(300, 350)
            self.gridbox = QtGui.QGridLayout(self)
            self.gridbox.setMargin(0)
            self.scrollArea = QtGui.QScrollArea(self)
            self.scrollArea.setWidgetResizable(True)
            self.scrollContents = QtGui.QWidget(self.scrollArea)
            self.vbox = QtGui.QVBoxLayout(self.scrollContents)
            self.vbox.setContentsMargins(2, 0, 2, 0)
            self.vbox_2 = QtGui.QVBoxLayout()
     
            spacerItem = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, 
                                            QtGui.QSizePolicy.Expanding)
            self.vbox_2.addItem(spacerItem)
            self.vbox.addLayout(self.vbox_2)
            self.scrollArea.setWidget(self.scrollContents)
            self.gridbox.addWidget(self.scrollArea, 0, 0, 1, 1)
            self.items = []
     
        def add_item(self, name, title, icon=None):
            item = ListItem(self)
            item.name_lbl.setText(name)
            item.title_lbl.setText(title)
            if icon is not None:
                item.pict.setPixmap(QtGui.QPixmap(icon))
     
            self.vbox_2.insertWidget(len(self.items), item)
            self.items.append(item)
     
    class ListItem(QtGui.QWidget):
        def __init__(self, parent=None):
            super(ListItem, self).__init__(parent)
            self.hbox = QtGui.QHBoxLayout(self)
            self.hbox.setMargin(0)
            self.hbox_1 = QtGui.QHBoxLayout()
            self.pict = QtGui.QLabel(self)
            self.pict.setMaximumSize(QtCore.QSize(48, 48))
            self.hbox_1.addWidget(self.pict)
            self.vbox = QtGui.QVBoxLayout()
            self.name_lbl = QtGui.QLabel(self)
            self.vbox.addWidget(self.name_lbl)
            self.title_lbl = QtGui.QLabel(self)
            self.vbox.addWidget(self.title_lbl)
            self.hbox_1.addLayout(self.vbox)
            self.hbox.addLayout(self.hbox_1)
     
    def set_people():
        ui.add_item('C. Chaplin', 'Philosophe', 'chemin/icone')
        ui.add_item('G. Depardieu', 'Contribuable belge', 'chemin/icone')
     
    if __name__ == "__main__":
        app = QtGui.QApplication(sys.argv)
        ui = ListPanel()
        ui.show()
     
        # On crée deux items
        set_people()
     
        sys.exit(app.exec_())

  4. #4
    Membre habitué Avatar de ashren
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 101
    Points : 193
    Points
    193
    Par défaut
    Bonsoir,

    une autre solution serait d'utiliser une QListView et de définir un delegate avec cette méthode http://doc.qt.digia.com/qt/qabstract...etItemDelegate.

    Ce qui évite de s'embêter à ré-implémenter le tri et autre fonctions utiles.

  5. #5
    Futur Membre du Club
    Inscrit en
    Décembre 2012
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2012
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Bonsoir ashren,

    Je te remercie pour cette solution. Cette une très bonne idée et ça va être certainement utile pour moi en future.

    Pourtant pour mon projet actuel, j'ai décidé de continue avec QScrollArea à cause de la nature complexe de mon widget personallisé qu'il me faut.

    Bien que ça pourrait aussi être possible avec un qitemdelegate, je pense pas que ça va me servir (je n'ai pas de confiance).

    Mais en tout cas, merci beaucoup. ;-)

    Je viens de demander une autre question sur le sujet des base des données. Si tu pourrait la voir et partage tes experience, je serais très content.

    Citation Envoyé par ashren Voir le message
    Bonsoir,

    une autre solution serait d'utiliser une QListView et de définir un delegate avec cette méthode http://doc.qt.digia.com/qt/qabstract...etItemDelegate.

    Ce qui évite de s'embêter à ré-implémenter le tri et autre fonctions utiles.

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

Discussions similaires

  1. [Débutant] comment Créer descripteur HOG pour une liste d'image
    Par sahar90 dans le forum Images
    Réponses: 1
    Dernier message: 15/01/2015, 09h01
  2. [VBA-E] Comment créer un control sur une liste de choix ?
    Par Soulsurfer dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 12/02/2007, 12h42
  3. Comment créer un fichier d'une taille précise ? Solutions ?
    Par comeochris dans le forum Autres Logiciels
    Réponses: 10
    Dernier message: 29/03/2006, 00h49
  4. Comment créer un commentaire dans une cellule d'Excel ?
    Par WebPac dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 26/04/2005, 09h23
  5. [langage] Comment rajouter des champs dans une liste
    Par toto_titi dans le forum Langage
    Réponses: 4
    Dernier message: 28/08/2003, 14h09

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