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 :

PyQT5 : Création d'une liste à partir d'un QSqlRelationalTableModel [QtGui]


Sujet :

PyQt Python

  1. #1
    Membre régulier
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Septembre 2015
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Algérie

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2015
    Messages : 148
    Points : 92
    Points
    92
    Par défaut PyQT5 : Création d'une liste à partir d'un QSqlRelationalTableModel
    Bonjour,

    J'utilise deux QTableView l'un affiche les clients et l'autre affiche les informations détaillées pour chaque clients par l'intermédiaire de la fonction setfilterphases
    Pour le moment, il n'y a pas de problème chaque enregistrement sélectionné dans le premier tableau, le second affiche ces données.

    Ce que demande, c'est comment afficher les informations détaillées pour chaque clients dans une list [] comme ceci : (111111, 222222, 333333, '2018-12') à partir du QSqlRelationalTableModel du deuxième QTableView.
    Autrement dit, adapter le code python ci-dessous en PyQt :

    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
     
    c.execute("SELECT phase1, phase2, phase3, date FROM tmp1 WHERE reference=id")
    data = c.fetchall()
     
    phase1     = []
    phase2     = []
    phase3     = []
    date = []
     
    print(data)
     
    for row in data:
        print(row)
        phase1.append(row[0])
        phase2.append(row[1])
        phase3.append(row[2])
        date.append(row[3])


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     #Liste Clients
     
            self.modellistemenu = QSqlRelationalTableModel(self)
            self.modellistemenu.setTable("clients")
            self.modellistemenu.setEditStrategy(QSqlRelationalTableModel.OnManualSubmit)
            self.modellistemenu.select()
            self.modellistemenu.setSort(0, Qt.AscendingOrder)
            self.ui.tableViewmenu.setSortingEnabled(False)
            self.ui.tableViewmenu.resizeColumnsToContents()
            self.ui.tableViewmenu.setModel(self.modellistemenu)
            self.ui.tableViewmenu.selectionModel().currentRowChanged
            self.modellistemenu.setRelation(0,QSqlRelation('tmp1', 'reference', ' '))

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
       #Affichage Phases
     
            self.modellistetmp1 = QSqlRelationalTableModel(self)
            self.modellistetmp1.setTable("tmp1")
            self.modellistetmp1.setEditStrategy(QSqlRelationalTableModel.OnManualSubmit)
            self.modellistetmp1.select()
            self.modellistetmp1.setSort(0, Qt.AscendingOrder)
            self.ui.tableViewrelevephases.setSortingEnabled(True)
            self.ui.tableViewrelevephases.resizeColumnsToContents()
            self.ui.tableViewrelevephases.setModel(self.modellistetmp1)
     
            self.ui.tableViewmenu.clicked.connect(self.setfilterphases)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        def setfilterphases(self, index):
            reference=self.modellistemenu.data(self.modellistemenu.index(index.row(),0, QModelIndex()))
            self.modellistetmp1.setFilter("reference = {}".format(reference))
            self.ui.tableViewrelevephases.setModel(self.modellistetmp1)
    Merci

  2. #2
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Pour avoir sous forme de liste le contenu du QTableView, voilà un petit code de principe:

    self.tw est le QTableView.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
                # charge toutes les lignes
                while self.tw.model().canFetchMore():
                    self.tw.model().fetchMore()            
     
                # extrait les valeurs affichées
                table = []
                for lig in range(0, self.tw.model().rowCount()):
                    table.append([]) # ajout d'une nouvelle ligne
                    for col in range(0, self.tw.model().columnCount()):
                        index = self.tw.model().index(lig, col)
                        valeur = self.tw.model().data(index)
                        table[-1].append(valeur) # ajout d'une nouvelle valeur à la ligne en cours
    Les 1ères lignes (fetchMore()...) sont nécessaires, sinon, le nombre de lignes calculé est limité aux lignes du cache (256 chez moi). C'est dans la doc.

    A voir le type de la valeur extraite selon la base et son pilote. Si nécessaire, on la teste (if isinstance(...)) et on la convertit selon le besoin.

    Une des utilisations intéressantes est de transmettre la table ainsi obtenue à un tableur (Excel, ...) après conversion en fichier csv. Mais dans ce cas, il peut être nécessaire de faire des conversions de valeurs. Par exemple, avec Excel français, les flottants ne sont reconnus automatiquement comme nombres qu'avec une virgule.
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  3. #3
    Membre régulier
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Septembre 2015
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Algérie

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2015
    Messages : 148
    Points : 92
    Points
    92
    Par défaut
    Merci ça marche.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 05/06/2012, 13h13
  2. Projet de création d'une liste à partir d'un fichier txt
    Par genius2139 dans le forum VBScript
    Réponses: 64
    Dernier message: 09/02/2012, 19h21
  3. problème création d'une liste à partir d'une première liste
    Par Boujoute dans le forum Général Python
    Réponses: 4
    Dernier message: 22/05/2011, 00h10
  4. [SP-2010] Création d'une liste contact à partir AD
    Par hassine dans le forum SharePoint
    Réponses: 4
    Dernier message: 24/06/2010, 15h28
  5. Réponses: 1
    Dernier message: 26/08/2007, 22h21

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