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 :

Récupérer lignes multiples qtableview python


Sujet :

PyQt Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2019
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Décembre 2019
    Messages : 62
    Par défaut Récupérer lignes multiples qtableview python
    Bonjour à tous,
    je souhaite faire une traitement sqlite sur plusieurs lignes mais je n'arrive pas à récupérer une liste des données de ma colonne id.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        def test_row(self):
     
            #recherches lignes tableview
            list=[]
            indexes = self.ui.tableView_2.selectionModel( ).selectedRows( )
            for index in sorted(indexes):
                list.append(index.row( ))
                print('ligne %d selectionnée' % index.row( ))
                print('liste', list)
     
            # recherche donnees table
            index = self.ui.tableView_2.selectedIndexes( )[1]
            donnees_table = (self.ui.tableView_2.model( ).data(index))
            print("index : " + str(donnees_table))
    merci

  2. #2
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    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 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    J'avais donné du code pour extraire les données affichées d'un QTableView ici:
    https://www.developpez.net/forums/d1...-d-qtableview/

    Mais je n'ai peut-être pas bien compris le problème: de quel traitement sqlite est-il question?

    Regarde si ça te suffit, sinon, dis ce qui te manque.

  3. #3
    Membre confirmé
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2019
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Décembre 2019
    Messages : 62
    Par défaut tableview et item
    Bonjour et encore merci Tyrtamos car je cherche depuis un moment

    je n'arrive pas à récupérer les lignes entières sélectionnées, j'ai fait un petit code pour être plus clair, pour mon projet ce sera une bdd sqlite
    je clique sur "test" pour récupérer les lignes sélectionnées (1.2.3 par exemple), l'idée est de récupérer les id de la bdd et de mettre à jour les indexs correspondant d'une colonne.

    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
    69
    70
    71
    72
    73
    74
    75
    from PyQt5.QtWidgets import *
    from PyQt5.QtGui import *
    import random
     
     
    class Test(QWidget):
        def __init__(self):
            super( ).__init__( )
     
            # CREATE THE TABLE
            self.table = QTableView(self)  
            self.table.setGeometry(0, 0, 575, 575)
            self.model = QStandardItemModel(self)  
            self.table.setModel(self.model)  
            self.table.setEditTriggers(QAbstractItemView.NoEditTriggers)
            self.populate( )
     
     
            self.button = QPushButton('Bouton ', self)
     
            layout = QVBoxLayout(self)
            layout.addWidget(self.table)
            layout.addWidget(self.button)
            self.setLayout(layout)
     
            self.button.clicked.connect(self.test)
     
     
     
     
     
        def populate(self):
     
            values = []
            for i in range(10):
                sub_values = []
                for i in range(4):
                    value = random.randrange(1, 100)
                    sub_values.append(value)
                values.append(sub_values)
     
            for value in values:
                row = []
                for item in value:
                    cell = QStandardItem(str(item))
                    row.append(cell)
                self.model.appendRow(row)
     
            self.show( )
     
        def test(self):
     
            # je recupére les lignes selectionnées avec click button
            list = []
            indexes = self.table.selectionModel( ).selectedRows( )
            for index in sorted(indexes):
                list.append(index.row( ))
                print('ligne %d selectionnée' % index.row( ))
                print('liste', list)
     
            # j'arrive à recuperer un index
            index = self.table.selectedIndexes( )[1]
            donnees_table = (self.table.model( ).data(index))
            print("index : " + str(donnees_table))
     
            # comment arriver à récupérer numéro ligne et la ligne (ce sera une bdd sql dans mon projet)
            # ligne 1, et les indexs de toute la ligne dans le tableview
            # ligne 2, et es indexs de toute la ligne dans le tableview
     
    if __name__ == '__main__':
        import sys
     
        app = QApplication(sys.argv)
        ex = Test( )
        sys.exit(app.exec_( ))
    merci

  4. #4
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    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 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    C'est normal. Tu veux récupérer une des données d'une ligne en ne sélectionnant qu'une case => quand la ligne "index = self.table.selectedIndexes( )[1]" s'exécute, elle se plante parce qu'il n'y a qu'une seule donnée disponible (ça se plante avec le "[1]" final).

    La preuve: ton programme fonctionne si tu sélectionnes la ligne complète en cliquant sur son entête à gauche. Essai!

    Suggestion: puisque tu sais trouver le numéro de ligne qui t'intéresse, tu devrais pouvoir trouver n'importe quelle donnée de cette ligne en utilisant le code dont je t'ai donné le lien précédemment.

  5. #5
    Membre confirmé
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2019
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Décembre 2019
    Messages : 62
    Par défaut index tableview
    bonjour,
    désolé je n'ai pas ton expérience, ça fait un moment que je tourne en rond.
    j'ai du mal à comprendre ton code si tu pouvais me le compléter ?
    Merci

  6. #6
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    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 486
    Billets dans le blog
    6
    Par défaut
    Essaie ça dans la méthode test():

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        def test(self):
     
            indexes = self.table.selectionModel( ).selectedIndexes( )
            print(len(indexes)) # nombre de cases sélectionnées
            for index in indexes:
                row = index.row()
                col = index.column()
                item = self.table.model().item(row, col)
                elem = item.data(Qt.DisplayRole) 
                print("case:", row, col, "=>", elem)
    Ainsi, quelques soient les cases sélectionnées, y compris pour des cases discontinues, on trouve les coordonnées [row, col] de chacune des cases dans l'ordre de leur sélection.

    Si tu ne souhaites que la colonne d'indice 1 de toutes les lignes sélectionnées, tu cherches les items de coordonnées [row, 1]. Mais s'il y a plusieurs cases sélectionnées de la même ligne, tu auras plusieurs fois la même données. Pour éviter ça, il faut mettre le numéro de ligne dans une liste et faire le test pour savoir si la ligne a déjà été rencontrée.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 25/06/2012, 13h51
  2. [ListBox] Récupérer sélection multiple ?
    Par Kylen dans le forum ASP.NET
    Réponses: 4
    Dernier message: 29/06/2006, 14h57
  3. récupérer ligne date maximum
    Par StIcK dans le forum Requêtes
    Réponses: 2
    Dernier message: 25/01/2006, 01h51
  4. CR9 - Récupérer valeurs multiples d'un champ paramètre
    Par CR9-Deb dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 06/07/2005, 16h08

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