bonsoir à tous
comment exporter un qtableWidget vers un fichier csv
Pièce jointe 452563
Version imprimable
bonsoir à tous
comment exporter un qtableWidget vers un fichier csv
Pièce jointe 452563
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:
J'ai rempli les cases avec un texte du genre "1x1" (numéro de ligne x numéro de colonne)Code:
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 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.
Toujours grand; mon ami merci beaucoup