self.setCursor(Qt.OpenHandCursor) self.setAcceptHoverEvents(True) def
hoverEnterEvent(self,event): couleur =
self.brush.color().lighter(FACTEUR_ECLAIRCISSSEMENT)
self.setBrush(QBrush(couleur)) def hoverLeaveEvent(self,event):
self.setBrush(self.brush) class SceneMosaiQ(QGraphicsScene): def
__init__(self): QGraphicsScene.__init__(self) size = 2.0**32
self.carreMosaiQUnivers = CarreMosaiQ(0,0,size)
self.addItem(self.carreMosaiQUnivers) class VueMosaiQ(QGraphicsView): def
__init__(self,scene): QGraphicsView.__init__(self,scene)
self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.setBackgroundBrush(QColor(COULEUR_FOND))
self.setWindowTitle("MosaiQ") self.resize(800,600)
self.fitInView(scene.carreMosaiQUnivers,Qt.KeepAspectRatio) if __name__ ==
"__main__": app = QApplication(sys.argv) sceneMosaiQ = SceneMosaiQ()
vueMosaiQ = VueMosaiQ(sceneMosaiQ) vueMosaiQ.show() sys.exit(app.exec_())
Il est de bonne pratique de placer les différents paramètres importants de
l'application dans des variables. On peut ainsi facilement les modifier sans
parcourir le code source. On pourra, à terme, déplacer ces paramètres dans un
ficher de configuration à importer.
CarreMosaiQ hérite de QGraphicsRectItem car on veut dessiner un carré (pour
rappel, un carré est un cas particulier de rectangle !).
On veut le même pinceau pour dessiner tous les contours de nos instances de carré :
on crée donc ce pinceau une fois pour toutes, en attribut de classe. Il suffira alors de
l'assigner à chaque nouvelle instance créée. On définit ce pinceau comme
cosmétique, car on prévoit de faire de grands zooms et on veut éviter que les
contours des carrés grossissent démesurément. On pourrait tout aussi bien définir un
pinceau invisible (Qt.NoPen), sachant que les couleurs aléatoires des brosses
suffisent à distinguer les carrés ; c'est juste un choix esthétique qu'on pourrait
d'ailleurs rendre configurable.
Le constructeur CarreMosaiQ a juste besoin de trois arguments : position (x,y) du
coin supérieur gauche sur la scène et longueur du côté c. Même si c'est assez rare,
on a ici une signature qui a moins d'arguments que le constructeur de la classe
parente : comme on veut dessiner un carré, il est inutile de demander à l'appelant de
233
Précédent

- 234/494

Suivant