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

GUI Python Discussion :

qtableWidget vers un fichier csv


Sujet :

GUI Python

  1. #1
    Membre à l'essai
    qtableWidget vers un fichier csv
    bonsoir à tous

    comment exporter un qtableWidget vers un fichier csv


  2. #2
    Expert éminent
    Bonjour,

    J'ai modifié le code que je t'ai déjà donné, en ajoutant l'enregistrement du contenu du QTableWidget dans un fichier csv:

    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
    76
    77
    78
    79
    80
    #! /usr/bin/python3
    # -*- coding: utf-8 -*-
     
    import sys
    from PyQt5 import QtCore, QtGui, QtWidgets
    import csv
     
    ##############################################################################
    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("{}x{}".format(row, col))
                    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):
            """méthode lancée à chaque modification du contenu d'une case
            """
            # 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)
                )
     
        #=========================================================================
        def sauvecsv(self, fichiercsv):
            """Lit le QTableWidget et enregistre son contenu dans un fichier csv
            """
            with open(fichiercsv, 'w', newline='') as csvfile:
                csvwriter = csv.writer(csvfile, delimiter=';', quoting=csv.QUOTE_MINIMAL)
                for row in range(0, self.tableWidget.rowCount()):
                    ligne = []
                    for col in range(0, self.tableWidget.columnCount()):
                        valeurcase = self.tableWidget.item(row, col).text().strip()
                        ligne.append(valeurcase)
                    csvwriter.writerow(ligne)
     
        #=========================================================================
        def keyPressEvent(self, event):
            """Interception des touches reçues du clavier
            """
            if event.key()==QtCore.Qt.Key_S and (event.modifiers() & QtCore.Qt.AltModifier):
                # on a tapé Alt-S au clavier
                self.sauvecsv("monfichier.csv") # => enregistrement des données
                event.accept()
            else:
                event.ignore() # transmission du QEvent à l'ancêtre
     
    ##############################################################################
    if __name__ == "__main__":
        app = QtWidgets.QApplication(sys.argv)
        window = MainWindow()
        window.show()
        sys.exit(app.exec_())


    J'ai rempli les cases avec un texte du genre "1x1" (numéro de ligne x numéro de colonne)

    J'ai ajouté un "keyPressEvent" pour récupérer un "Alt-S" tapé au clavier qui lancera l'enregistrement par la méthode sauvecsv

    C'est la méthode sauvecsv(fichiercsv) qui va lire le contenu du QTableWidget et l'enregistrer dans 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

  3. #3
    Membre à l'essai
    Toujours grand; mon ami merci beaucoup

###raw>template_hook.ano_emploi###