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
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
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
Merci beaucoup pour cette excellente explication, mais il reste le partié de mise à jour , si possible une idée sur cela
J'ai joint les fichiers du programme autant que possible pour m'aider à faire le code car je suis un peu novice
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):
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.
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_())
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
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager