3. Vue et délégué
À présent que nous avons notre modèle de bibliothèque, nous sommes prêts à enrichir
la classe MainWindowBiblio pour représenter visuellement ce modèle. Pour débuter
en douceur, on va se fixer deux objectifs, qui concernent la vue et le délégué :
1. La liste doit afficher les livres du modèle (objectif de la vue).
2. Les champs doivent afficher les détails du livre sélectionné (objectif du délégué).
Concrètement, pour faire cela, on va :
créer une instance de ModeleTableBiblio avec (pour l'exemple) la liste de trois
livres donnés plus haut ;
déclarer à la vue treeViewLivres qu'elle représente ce modèle en invoquant la
méthode setModel ;
réagir au signal selectionChanged pour afficher les détails du livre sélectionné.
Voici le code qui réalise ces points (à compléter dans main_window_biblio.py).
# -*- coding: utf-8 -*# main_windows_biblio.py
from PyQt5.QtCore import pyqtSlot, QDate
from PyQt5.QtWidgets import QMainWindow, QMessageBox, QFileDialog
from Ui_main_window_biblio import Ui_MainWindowBiblio
from modele_biblio import Livre, ModeleTableBiblio
class MainWindowBiblio(QMainWindow, Ui_MainWindowBiblio):
def __init__(self, parent=None):
super(MainWindowBiblio,self).__init__(parent)
self.setupUi(self)
# code de test à supprimer …
livresTest = [ Livre("Une étude en rouge","Conan Doyle", … ), … ]
self.modeleTableBiblio = ModeleTableBiblio(livresTest)
self.treeViewLivres.setModel(self.modeleTableBiblio)
self.treeViewLivres.selectionModel().selectionChanged.connect(
115
À présent que nous avons notre modèle de bibliothèque, nous sommes prêts à enrichir
la classe MainWindowBiblio pour représenter visuellement ce modèle. Pour débuter
en douceur, on va se fixer deux objectifs, qui concernent la vue et le délégué :
1. La liste doit afficher les livres du modèle (objectif de la vue).
2. Les champs doivent afficher les détails du livre sélectionné (objectif du délégué).
Concrètement, pour faire cela, on va :
créer une instance de ModeleTableBiblio avec (pour l'exemple) la liste de trois
livres donnés plus haut ;
déclarer à la vue treeViewLivres qu'elle représente ce modèle en invoquant la
méthode setModel ;
réagir au signal selectionChanged pour afficher les détails du livre sélectionné.
Voici le code qui réalise ces points (à compléter dans main_window_biblio.py).
# -*- coding: utf-8 -*# main_windows_biblio.py
from PyQt5.QtCore import pyqtSlot, QDate
from PyQt5.QtWidgets import QMainWindow, QMessageBox, QFileDialog
from Ui_main_window_biblio import Ui_MainWindowBiblio
from modele_biblio import Livre, ModeleTableBiblio
class MainWindowBiblio(QMainWindow, Ui_MainWindowBiblio):
def __init__(self, parent=None):
super(MainWindowBiblio,self).__init__(parent)
self.setupUi(self)
# code de test à supprimer …
livresTest = [ Livre("Une étude en rouge","Conan Doyle", … ), … ]
self.modeleTableBiblio = ModeleTableBiblio(livresTest)
self.treeViewLivres.setModel(self.modeleTableBiblio)
self.treeViewLivres.selectionModel().selectionChanged.connect(
115
