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 81 82 83 84 85 86 87 88
| #!/usr/bin/python
# -*- coding: utf-8 -*-
# Python 3 PyQt5
"""
code test pour un QTableView avec un modèle QStandardItemModel
"""
import sys
import os
from PyQt5 import (QtWidgets, QtGui, QtCore)
#############################################################################
class Fenetre(QtWidgets.QWidget):
#========================================================================
def __init__(self, headers, datas, parent=None):
super().__init__(parent)
self.resize(800, 600)
self.headers = headers
self.datas = datas
# crée le modèle
self.model = QtGui.QStandardItemModel()
#
# met les titres des colonnes dans le modèle
for j, header in enumerate(headers):
self.model.setHorizontalHeaderItem(j, QtGui.QStandardItem(header))
#
# met les données dans le modèle
for i, row in enumerate(self.datas):
for j, col in enumerate(row):
item = QtGui.QStandardItem()
item.setData(col, QtCore.Qt.DisplayRole)
self.model.setItem(i, j, item)
# crée le QTableView ainsi que son lien avec le modèle
self.tablevue = QtWidgets.QTableView(self)
self.tablevue.setModel(self.model)
# ajuste la largeur des colonnes à leur contenu
self.tablevue.resizeColumnsToContents()
# crée le bouton pour récupérer les données
self.bouton = QtWidgets.QPushButton("récup des données")
self.bouton.clicked.connect(self.recup)
# positionne les widgets dans la fenêtre
posit = QtWidgets.QGridLayout()
posit.addWidget(self.tablevue, 0, 0)
posit.addWidget(self.bouton, 1, 0)
self.setLayout(posit)
#========================================================================
def recup(self):
"""récupére et affiche en console les données après modification
"""
# récupère les données modifiées
datas2 = []
for i in range(0, self.tablevue.model().rowCount()):
datas2.append([]) # nouvelle ligne
for j in range(0, self.tablevue.model().columnCount()):
item = self.tablevue.model().item(i,j)
data = item.data(QtCore.Qt.DisplayRole)
datas2[-1].append(data)
# affiche les données récupérées
print("Données modifiées: ", datas2)
print("Données initiales: ", self.datas)
print()
print("Valeur de la donnée de la 2ème ligne (index=1) 2ème colonne (index=1):")
i, j = 1, 1
data = self.tablevue.model().item(i,j).data(QtCore.Qt.DisplayRole)
print(data)
#############################################################################
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
# données à mettre dans le QTableView
headers = ['colonne1','colonne2','colonne3', 'colonne4'] # titre des colonnes
datas = [[1, 2, 3, 4], [5, 6, 7.1, 8.2], [9, 10, 11, 12]]
fen = Fenetre(headers, datas)
fen.setAttribute(QtCore.Qt.WA_DeleteOnClose)
fen.show()
sys.exit(app.exec_()) |
Partager