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 89 90 91 92 93 94 95 96 97 98 99 100
| #!/usr/bin/python3
# -*- coding: utf-8 -*-
import sys
from PyQt5 import QtWidgets, QtGui
#############################################################################
class Window(QtWidgets.QWidget):
#========================================================================
def __init__(self, parent=None):
super().__init__(parent)
self.setWindowTitle("Exemple de QDataWidgetMapper")
# crée le modèle
self.setupModel()
# pour afficher le nom
self.nameLabel = QtWidgets.QLabel("Nom:")
self.nameEdit = QtWidgets.QLineEdit()
# # pour afficher l'adresse
self.addressLabel = QtWidgets.QLabel("Adresse:")
self.addressEdit = QtWidgets.QTextEdit()
self.addressEdit.setAcceptRichText(False)
# # pour afficher l'age
self.ageLabel = QtWidgets.QLabel("Age:")
self.ageSpinBox = QtWidgets.QSpinBox()
# Pour naviguer entre les enregistraments
self.nextButton = QtWidgets.QPushButton("Suivant")
self.previousButton = QtWidgets.QPushButton("Précédent")
# Widget de correspondance entre les colonnes des enregistrements
self.mapper = QtWidgets.QDataWidgetMapper(self)
self.mapper.setModel(self.model)
self.mapper.addMapping(self.nameEdit, 0)
self.mapper.addMapping(self.addressEdit, 1)
self.mapper.addMapping(self.ageSpinBox, 2)
# Connexions
self.previousButton.clicked.connect(self.mapper.toPrevious)
self.nextButton.clicked.connect(self.mapper.toNext)
self.mapper.currentIndexChanged.connect(self.updateButtons)
# Nécessaire au premier lancement
self.mapper.toFirst()
self.updateButtons(0)
# positionne les widgets dans la fenêtre
posit = QtWidgets.QGridLayout()
# 1ère ligne
posit.addWidget(self.nameLabel, 0, 0, 1, 1)
posit.addWidget(self.nameEdit, 0, 1, 1, 2)
posit.addWidget(self.nextButton, 0, 3, 1, 1)
# 2e ligne
posit.addWidget(self.addressLabel, 1, 0, 1, 1)
posit.addWidget(self.addressEdit, 1, 1, 2, 2)
posit.addWidget(self.previousButton, 1, 3, 1, 1)
# 3e ligne
posit.addWidget(self.ageLabel, 3, 0, 1, 1)
posit.addWidget(self.ageSpinBox, 3, 1, 1, 2)
# mise en place
self.setLayout(posit)
#========================================================================
def setupModel(self):
"""Crée le modèle
"""
self.model = QtGui.QStandardItemModel(5, 3, self)
names = ["Alice", "Bob", "Carol", "Donald", "Emma"]
adresses = ["Adresse Alice", "Adresse Bob", "Adresse Carol", "Adresse Donald", "Adresse Emma"]
ages = ["12", "25", "29", "32", "41"]
for row in range(0, len(names)):
item = QtGui.QStandardItem(names[row])
self.model.setItem(row, 0, item)
item = QtGui.QStandardItem(adresses[row])
self.model.setItem(row, 1, item)
item = QtGui.QStandardItem(ages[row])
self.model.setItem(row, 2, item)
#========================================================================
def updateButtons(self, index):
"""Met à jour l'état des boutons si nécessaire
"""
self.previousButton.setEnabled(index>0)
self.nextButton.setEnabled(index<self.model.rowCount()-1)
#############################################################################
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
fen = Window()
fen.show()
sys.exit(app.exec_()) |
Partager