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 :

Remplissage d'une QTableWidget [QtGui]


Sujet :

PyQt Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 62
    Par défaut Remplissage d'une QTableWidget
    Bonjour,

    J'amerais savoir si vous pouviez m'éclairer sur le remplissage d'une QtableWidget. Dans un 1er temps j'ai bien réussi a récuperer mes données dans ma BDD, mais sa ce complique pour les afficher dans la tableWidget

    je ne comprend pas vraiment comment utiliser mes données récupérée dans la BDD. Je les mis dans une liste pour pouvoir les utiliser comme ci dessous.
    A savoir : un doc peut avoir plusieurs entité, il faut donc afficher toute les entite du doc.
    Mais avec le code ci dessous, j'affiche que la dernière entité mais pas les précédentes


    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
     #recupere id du doc choisi
             idDocChoisi =  self.CimConsulterDoc.id.value()
             print idDocChoisi
             self.call_CimConsulterAttrib_dialog('cimattribuer')
             #Requete selection l'entite, nbre de doc et suivi maj
             tab = ModelElixir2.Attribution.query.filter_by(DocH_document_id=idDocChoisi).all()
             for elem in tab:
                idEntite = elem.Entite_id
                nbre = elem.Nbredoc
                suivi = elem.SuiviMAJ
                tabE = ModelElixir2.Entite.query.filter_by(id = idEntite).all()   
                for chps in tabE:
                    entite = chps.LibelleLong_Entite
                    liste =[entite]
     
             #Config de la tableWidget
             self.CimConsulterAttrib.tableWidget.clear()
             self.CimConsulterAttrib.tableWidget.setColumnCount(3)
             self.CimConsulterAttrib.tableWidget.setHorizontalHeaderLabels(["Entite", "Nombre de Doc", "Suivi MAJ"])
     
             ligne = 0
             for champ in liste:
                 colonne = 0
                 newitem = QTableWidgetItem(champ)
                 self.CimConsulterAttrib.tableWidget.setItem(ligne, colonne, newitem)
    print de liste -> [u'Pole Caisse Amenagement ']
    [u'Pole Caisse Amenagement ']
    [u'Adjoint au Directeur']

    je pense que ma liste devrait s'écrire de cette manière :
    liste -> [u'Pole Caisse Amenagement '],[u'Pole Caisse Amenagement '],[u'Adjoint au Directeur']
    pour que j'obtienne toute les entités. Mais je ne sais pas comment l'obtenir si quelqu'un à une idée.

    Merci d'avance pour vos réponses.

    Cordialement

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Ce que tu appelles liste est en fait un dictionnaire, cela crée des confusions.

    Avec les données de ton code, ceci donne le résultat attendu:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
            liste = {'A': u'Pole Compta', 'C': 'non' , 'B': 8}
            rc = self.tableWidget.rowCount()
            # Ajouter une ligne si nécessaire
            self.tableWidget.setRowCount(rc + 1)
            # On itère sur la liste des clés du dico
            for idx, k in enumerate(sorted(liste.keys())):
                # le QTableWidgetItem prend la valeur donnée dans le dico,
                # Attentin au codage, ASCII, Unicode, ...
                newitem = QtGui.QTableWidgetItem(str(liste[k]))
                self.tableWidget.setItem(rc, idx, newitem)

  3. #3
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Tu as édité ton post ? parce que ton code n'est plus le même.

    Est-ce que ta liste ne devrait pas plutôt être faite comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
                liste = []
                for chps in tabE:
                    entite = chps.LibelleLong_Entite
                    liste.append(entite)
    Pour avoir
    [u'Pole Caisse Amenagement ', u'Pole Caisse Amenagement ', u'Adjoint au Directeur']
    Non ?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 62
    Par défaut
    En faite j'ai résolu le problème, j'avais un problème d'intentation avec mes for.
    Merci beaucoup VinsS

    voici le code pour ceux que sa peut intéresser :
    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
     #Requete select l'entite, nbre de doc et suivi maj
             tab = ModelElixir2.Attribution.query.filter_by(DocH_document_id=idDocChoisi).all()
             for elem in tab:
                idEntite = elem.Entite_id
                nbre = elem.Nbredoc
                suivi = elem.SuiviMAJ
                tabE = ModelElixir2.Entite.query.filter_by(id = idEntite).all()   
                for chps in tabE:
                    entite = chps.LibelleLong_Entite
                 #Remplissage de la TableWidget   
                list = {'A': entite, 'C': suivi, 'B' : nbre}
                print list
                rc = self.CimConsulterAttrib.tableWidget.rowCount()
             # Ajouter une ligne si nécessaire
                self.CimConsulterAttrib.tableWidget.setRowCount(rc + 1)
             # On itère sur la liste des clés du dico
                for idx, k in enumerate(sorted(list.keys())):
                     # le QTableWidgetItem prend la valeur donnée dans le dico,
                     # Attentin au codage, ASCII, Unicode, ...
                     newitem = QtGui.QTableWidgetItem(str(list[k]))
                     self.CimConsulterAttrib.tableWidget.setItem(rc, idx, newitem)
    Pendant que j'y suis j'ai toujours cette erreur :

    D:\Python26\lib\site-packages\sqlalchemy-0.7.3-py2.6.egg\sqlalchemy\engine\default.py:453: SAWarning: Unicode type received non-unicode bind param value
    param.append(processors[key](compiled_params[key]))

    sa viendrais qu'elixir est en ASCII. sait tu quelle est le parametrage d'elixir pour qu'il soit en uncode ?

    Cordialement

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 62
    Par défaut
    Bonjour,

    Je me permet de réouvrir ce post car j'ai une question sur le dictionnaire.
    J'ai des caractères accentuées dans ma BDD, et je pensais qu'en fesant un simple sa passerait dans le dictionnaire. Mais non. erreur ASCII me dit-il!

    Du coup dans mon dictionnaire j'ai rajouté des [] comme suite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    list = {'A': [mavar ],'B': [Titre]}
    plus d'erreur ASCII, le tableau est rempli mais mavar affiche : [u'Doc maitris\xe9']

    Je pense que je suis pas très loin de la solution. si quelqu'un pouvais m'aider sa serai bien sympa et promis j'arrete de vous embeter

    Cordialement

  6. #6
    Membre expérimenté 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
    Par défaut
    Bonjour,

    un print u'Doc maitris\xe9' affiche bien le 'é' chez moi sur Python 2.7 win7 x64.

    La variable contient donc ce qu'il faut non ?

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

Discussions similaires

  1. [PL/SQL] Boucle de remplissage d'une table.
    Par Maglight dans le forum Langage SQL
    Réponses: 1
    Dernier message: 22/12/2005, 16h35
  2. [VB.Net]Remplissage d'une checkedlistbox
    Par callo dans le forum Windows Forms
    Réponses: 5
    Dernier message: 13/12/2005, 13h10
  3. select pour obtenir la taille de remplissage d'une bdd
    Par sqlakf76 dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 15/07/2005, 13h44
  4. [JTable] Remplissage d'une JTable
    Par Ankya dans le forum Composants
    Réponses: 6
    Dernier message: 30/03/2005, 14h16
  5. Remplissage d'une zone d'un canvas
    Par ulysse66x dans le forum Composants VCL
    Réponses: 5
    Dernier message: 31/01/2004, 12h41

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