# -*- coding: utf-8 -*# modele_biblio.py
# version finale
…
import json
class ModeleTableBiblio(QAbstractTableModel):
…
def enregistreDansFichier(self,nomFichierBiblio):
with open(nomFichierBiblio,'w') as f: json.dump(self.livres,f) @staticmethod def
creeDepuisFichier(nomFichierBiblio): with open(nomFichierBiblio,'r') as f:
attributsLivres = json.load(f) livres = [Livre(*attrLivre) for attrLivre in attributsLivres]
return ModeleTableBiblio(livres) def ajouteLivre(self,livre): indiceLivre =
len(self.livres) self.beginInsertRows(QModelIndex(),indiceLivre,indiceLivre)
self.livres.append(livre) self.endInsertRows() def supprimeLivre(self,indiceLivre):
self.beginRemoveRows(QModelIndex(),indiceLivre,indiceLivre) del
self.livres[indiceLivre] self.endRemoveRows() def
remplaceLivre(self,indiceLivre,livre): self.livres[indiceLivre] = livre
self.dataChanged.emit(self.createIndex(indiceLivre,0), self.createIndex(indiceLivre,2))
Détaillons chaque méthode une par une.
enregistreDansFichier : la méthode json.dump transforme notre structure de
données en une longue chaîne de caractères au format JSON et l'écrit sur le fichier
donné ;
creeDepuisFichier : c'est le symétrique de la méthode précédente ; on lit le
contenu JSON du fichier donné, on obtient une liste de listes (attributsLivres)
via la méthode json.load ; on définit une liste en compréhension pour transformer
cela en liste de tuples nommés (livres) ; on passe cette liste au constructeur de
ModeleTableBiblio ; la méthode est déclarée statique car elle crée une nouvelle
instance, sans avoir besoin de self.
ajouteLivre : on ajoute le nouveau livre en fin de liste via append ; pour
120
# version finale
…
import json
class ModeleTableBiblio(QAbstractTableModel):
…
def enregistreDansFichier(self,nomFichierBiblio):
with open(nomFichierBiblio,'w') as f: json.dump(self.livres,f) @staticmethod def
creeDepuisFichier(nomFichierBiblio): with open(nomFichierBiblio,'r') as f:
attributsLivres = json.load(f) livres = [Livre(*attrLivre) for attrLivre in attributsLivres]
return ModeleTableBiblio(livres) def ajouteLivre(self,livre): indiceLivre =
len(self.livres) self.beginInsertRows(QModelIndex(),indiceLivre,indiceLivre)
self.livres.append(livre) self.endInsertRows() def supprimeLivre(self,indiceLivre):
self.beginRemoveRows(QModelIndex(),indiceLivre,indiceLivre) del
self.livres[indiceLivre] self.endRemoveRows() def
remplaceLivre(self,indiceLivre,livre): self.livres[indiceLivre] = livre
self.dataChanged.emit(self.createIndex(indiceLivre,0), self.createIndex(indiceLivre,2))
Détaillons chaque méthode une par une.
enregistreDansFichier : la méthode json.dump transforme notre structure de
données en une longue chaîne de caractères au format JSON et l'écrit sur le fichier
donné ;
creeDepuisFichier : c'est le symétrique de la méthode précédente ; on lit le
contenu JSON du fichier donné, on obtient une liste de listes (attributsLivres)
via la méthode json.load ; on définit une liste en compréhension pour transformer
cela en liste de tuples nommés (livres) ; on passe cette liste au constructeur de
ModeleTableBiblio ; la méthode est déclarée statique car elle crée une nouvelle
instance, sans avoir besoin de self.
ajouteLivre : on ajoute le nouveau livre en fin de liste via append ; pour
120
