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_()) |
Partager