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 :

csv et qtableWidget


Sujet :

PyQt Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur Génie Civil
    Inscrit en
    décembre 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur Génie Civil

    Informations forums :
    Inscription : décembre 2018
    Messages : 13
    Points : 17
    Points
    17
    Par défaut csv et qtableWidget
    salut a tous

    comment afficher un dataframe csv file sur un qtableWidget et comment fait un mise a jour sur se data avec l'utilisation de PyQt4

  2. #2
    Expert éminent
    Avatar de tyrtamos
    Profil pro
    Inscrit en
    décembre 2007
    Messages
    3 734
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2007
    Messages : 3 734
    Points : 7 264
    Points
    7 264
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Le principe est simple:

    - la lecture d'un fichier csv donne une "liste de listes". Chaque sous-liste correspond à une ligne, et contient les valeurs à mettre dans les cases du tableau.

    - à la création, un QTableWidget est complètement vide. Pour remplir une case, il faut créer un "QTableWidgetItem" avec son contenu (une chaîne de caractères), et le mettre dans cette case avec la méthode setItem du QTableWidget.

    A noter que PyQt4 n'est plus soutenu: on utilise PyQt5 maintenant.

    A noter aussi que pour coder avec une bibliothèque aussi puissante et complexe que PyQt5, il est indispensable d'avoir la documentation en ligne en permanence, sinon on n'avance pas:
    - pour la doc de PyQt5: https://www.riverbankcomputing.com/static/Docs/PyQt5/
    - Pour la doc de Qt5: https://doc.qt.io/qt-5/classes.html

    Et celle de QTableWidget: https://doc.qt.io/qt-5/qtablewidget.html
    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 à l'essai
    Homme Profil pro
    Ingénieur Génie Civil
    Inscrit en
    décembre 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur Génie Civil

    Informations forums :
    Inscription : décembre 2018
    Messages : 13
    Points : 17
    Points
    17
    Par défaut
    Merci beaucoup pour cette excellente explication, mais il reste le partié de mise à jour , si possible une idée sur cela

  4. #4
    Membre à l'essai
    Homme Profil pro
    Ingénieur Génie Civil
    Inscrit en
    décembre 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur Génie Civil

    Informations forums :
    Inscription : décembre 2018
    Messages : 13
    Points : 17
    Points
    17
    Par défaut
    J'ai joint les fichiers du programme autant que possible pour m'aider à faire le code car je suis un peu novice
    Fichiers attachés Fichiers attachés

  5. #5
    Expert éminent
    Avatar de tyrtamos
    Profil pro
    Inscrit en
    décembre 2007
    Messages
    3 734
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2007
    Messages : 3 734
    Points : 7 264
    Points
    7 264
    Billets dans le blog
    6
    Par défaut
    Pour entrer dans le mode édition d'une case avec la souris, on fait un double-clic. On change ensuite la valeur de la case au clavier, et on tape sur "Entrée" ou on change de case avec la souris (=changement de focus).

    On peut récupérer directement la nouvelle valeur de la case en connaissant son adresse [numéro de ligne, numéro de colonne] avec la méthode item(row, column) de QTableWidget.

    Mais au fur et à mesure qu'on change des valeurs, on peut aussi utiliser le signal "itemChanged" qui lancera à chaque modification un méthode qu'on aura crée pour récupérer la nouvelle valeur.

    Voilà un petit code de test pour montrer comment ça marche (désolé, c'est du PyQt5):

    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
    #! /usr/bin/python3
    # -*- coding: utf-8 -*-
     
    import sys
    from PyQt5 import QtCore, QtGui, QtWidgets
     
    ##############################################################################
    class MainWindow(QtWidgets.QMainWindow):
     
        #=========================================================================
        def __init__(self, parent=None):
            super().__init__(parent)
            self.resize(600, 250)
     
            # on crée un QTableWidget 5x5
            self.tableWidget = QtWidgets.QTableWidget(self)
            self.tableWidget.setRowCount(5)
            self.tableWidget.setColumnCount(5)
     
            # on remplit les cases avec des QTableWidgetItem
            for row in range(0, self.tableWidget.rowCount()):
                for col in range(0, self.tableWidget.columnCount()):
                    item = QtWidgets.QTableWidgetItem("")
                    self.tableWidget.setItem(row, col, item)
     
            # chaque changement de valeur des cases lancera la méthode "changedata"
            self.tableWidget.itemChanged.connect(self.changedata)                
     
            # on positionne le QTableWidget dans la fenêtre QMainWindow
            self.setCentralWidget(QtWidgets.QFrame())
            layout = QtWidgets.QGridLayout()
            layout.addWidget(self.tableWidget, 0, 0)
            self.centralWidget().setLayout(layout)
     
     
        #=========================================================================
        def changedata(self, item):
     
            # ligne et colonne de la case ayant lancé la méthode
            row = item.row()
            col = item.column()
     
            # récup de la valeur modifiée
            valeur = self.tableWidget.item(row, col).text().strip()
     
            # affichage de la nouvelle valeur de la case [row, col]
            QtWidgets.QMessageBox.information(self, 
                "Modification", 
                "Case: [{},{}]   Nouvelle valeur: {}".format(row, col, valeur)
                )
     
    ##############################################################################
    if __name__ == "__main__":
        app = QtWidgets.QApplication(sys.argv)
        window = MainWindow()
        window.show()
        sys.exit(app.exec_())
    Après une cession complète, rien n'empêche de relire tout le tableau ligne par ligne et case par case pour refabriquer la "liste de liste" initiale et mettre à jour le fichier csv.
    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

  6. #6
    Membre à l'essai
    Homme Profil pro
    Ingénieur Génie Civil
    Inscrit en
    décembre 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur Génie Civil

    Informations forums :
    Inscription : décembre 2018
    Messages : 13
    Points : 17
    Points
    17
    Par défaut
    Merci beaucoup

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

Discussions similaires

  1. Ouvrir un fichier CSV sur un QTableWidget
    Par lekev262 dans le forum PyQt
    Réponses: 0
    Dernier message: 01/08/2014, 23h17
  2. Mise à jour d'une table avec un fichier csv
    Par blackangel dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 26/05/2005, 15h46
  3. Convertion Interbase-->CSV
    Par DBBB dans le forum Bases de données
    Réponses: 2
    Dernier message: 09/06/2004, 15h17
  4. Réponses: 2
    Dernier message: 14/05/2004, 13h55
  5. CSV et XMLRAD
    Par JCK dans le forum XMLRAD
    Réponses: 4
    Dernier message: 26/04/2003, 20h21

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