Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 5 sur 5
  1. #1
    Invité de passage
    Inscrit en
    décembre 2012
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : décembre 2012
    Messages : 6
    Points : 2
    Points
    2

    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 Confirmé

    Homme Profil pro
    Inscrit en
    octobre 2008
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : octobre 2008
    Messages : 1 858
    Points : 2 567
    Points
    2 567

    Par défaut

    Salut,

    Un exemple basique:
    Code :
    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_())
    Vincent
    Oqapy . Qarte . PaQager

  3. #3
    Invité de passage
    Inscrit en
    décembre 2012
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : décembre 2012
    Messages : 6
    Points : 2
    Points
    2

    Par défaut

    Merci beaucoup Vincent, ça déchire ! ;-)

    Citation Envoyé par VinsS Voir le message
    Salut,

    Un exemple basique:
    Code :
    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 actif 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 : 167
    Points
    167

    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
    Invité de passage
    Inscrit en
    décembre 2012
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : décembre 2012
    Messages : 6
    Points : 2
    Points
    2

    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •