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 :

ElementTree > QTreeView [QtGui]


Sujet :

PyQt Python

  1. #1
    Membre habitué Avatar de Jazz_
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2010
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2010
    Messages : 290
    Points : 190
    Points
    190
    Par défaut ElementTree > QTreeView
    Bonjour,

    je m'explique, je cherche grosso-modo a afficher le contenu d'un XML dans un QtreeView.

    Pour parser le XML et pouvoir le modifier dans le code (ca aussi c'est important) j'ai utilisé un ElementTree j'ai trouvé ca ici (http://effbot.org/zone/element.htm)

    Mais pour inserrer ces données dans mon QTreeView, je crois que je dois utiliser une classe qui herite de QAbstractItemModel.

    Du coup... qu'est ce que je peut faire?

    Merci d'avance!
    Détendez-vous...

  2. #2
    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
    Bonjour,

    tu peux remplir un QStandardItemModel de QStandardItem à partir de ton XML, les QStandardItem acceptent les niveaux multiples (parents, enfants, sous-enfants, etc ...).

    Du coup, une petite fonction récursive pour charger ton XML et ça devrait le faire.

  3. #3
    Membre habitué Avatar de Jazz_
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2010
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2010
    Messages : 290
    Points : 190
    Points
    190
    Par défaut
    D'accord,

    Quels sont les attributs de la classe QStandardItemModel qui "impacteront" l'affichage la QTreeView que j'y associerais ?
    Ou dois-je mettre les informations issues de mon XML dans mon objet de type QStandartItemModel pour que l'affichage soit bon?
    Détendez-vous...

  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
    le QStandardItemModel possède une méthode appendRow qui permet d'ajouter des éléments racine et ensuite chaque QStandardItem possède également la même méthode, tu peut ainsi gérer ta hiérarchie.

    Pour les attributs de ton XML, chaque QStandardItem possède une méthode setData avec en premier paramètre la donnée et en second le rôle (tu peut créer des rôles personnalisés à partir de Qt.UserRole en faisant par exemple Qt.UserRole + 1), sachant que le texte affiché est par défaut gérer par le rôle Qt.DisplayRole.

    Il ne reste plus qu'à itérer sur ton XML de manière récursive et créer les QStandardItems à la volée.

    La documentation PyQt4 (riverbank) et PySide te permettront de comprendre de manière plus poussée le fonctionnement de ces classes.

    EDIT: un exemple de comment procéder

    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
     
    from xml.etree import cElementTree as etree
    from cStringIO import StringIO
    from PySide.QtGui import QTreeView, QStandardItemModel, QStandardItem, QApplication
    from PySide.QtCore import Qt
     
    XML = '''
    <root>
        <lv1 name="first" custom="test attribute 1">
            <lv2 name="sub first"/>
            <lv2 name="sub second"/>
        </lv1>
        <lv1 name="second" custom="test attribute 2">
            <lv2 name="sub third"/>
            <lv2 name="sub fourth"/>
        </lv1>
    </root>
    '''
     
    def parseXML(parent, node):
        for element in node:
            item = QStandardItem()
            item.setData(element.attrib.get('name', 'undefined'), Qt.DisplayRole)
            item.setData(element.attrib.get('custom'), Qt.UserRole)
            parseXML(item, element)
            parent.appendRow(item)
     
    if __name__ == '__main__':
        xml = etree.parse(StringIO(XML)).getroot()
        app = QApplication([])
        win = QTreeView()
        mdl = QStandardItemModel()
        win.setModel(mdl)
        parseXML(mdl, xml)
        win.show()
        app.exec_()

  5. #5
    Membre habitué Avatar de Jazz_
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2010
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2010
    Messages : 290
    Points : 190
    Points
    190
    Par défaut
    Merci beaucoup,

    ca marche bien !
    je pense que j'en ai assez pour le moment pour continuer merci!
    Détendez-vous...

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

Discussions similaires

  1. remplir un Qtreeview
    Par yan500 dans le forum Qt
    Réponses: 6
    Dernier message: 06/12/2007, 18h06
  2. comment tous sélectionner dans un Qtreeview.
    Par yan500 dans le forum Qt
    Réponses: 16
    Dernier message: 05/12/2007, 16h07
  3. DBDesigner4 * (elementtree + cheetah) => SQLAlchemy
    Par pacificator dans le forum Bibliothèques tierces
    Réponses: 0
    Dernier message: 24/11/2007, 01h53
  4. QTreeView, QListView et leurs copains
    Par Alouka dans le forum Qt
    Réponses: 2
    Dernier message: 12/01/2007, 08h36
  5. [Kylix] Labels du QTreeView tronqués
    Par Mister Nono dans le forum EDI
    Réponses: 3
    Dernier message: 05/11/2002, 19h45

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