2. Carré initial et surbrillance
Commençons par dessiner une scène avec un seul carré. La première fonction qu'on va
réaliser consiste à éclairer le carré lorsqu'il est survolé par le pointeur souris. Ceci est
courant — et utile ! — dans beaucoup d'interfaces utilisateur (menus, barres d'outils,
etc.) : on indique ainsi clairement l'élément qui sera affecté en cas de clic. Rappelons
que la scène sera bientôt remplie de milliers de petits carrés.
À cette fin, on utilise l'héritage et le patron de méthode présenté plus haut. Lorsque le
pointeur souris survole un QGraphicsItem, le framework appelle deux méthodes :
hoverEnterEvent quand il entre dans la surface de l'élément et hoverLeaveEvent
quand il en sort. Dès lors, on crée une classe CarreMosaiQ qui hérite de
QGraphicsRectItem ; il suffira alors de surcharger ces deux méthodes pour obtenir
l'effet voulu.
Voyons comment faire cela concrètement.
#-*- coding: latin_1 -*# MosaiQ v0.1
import sys
from random import randint
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QBrush, QPen, QPainter, QColor
from PyQt5.QtWidgets import QApplication, QGraphicsScene,
QGraphicsView,\
QGraphicsRectItem
# paramètres de configuration
# couleur du fond de la scène
COULEUR_FOND = "white"
# couleur utilisée pour le contour des carrés COULEUR_CONTOUR = "black" #
plage (min,max) pour les composantes RGB de la couleur des carrés
PLAGE_COULEURS = (50,250) # pourcentage utilisé pour éclairer les carrés
survolés FACTEUR_ECLAIRCISSSEMENT = 150 class
CarreMosaiQ(QGraphicsRectItem): _pen =
QPen(QColor(*COULEUR_CONTOUR_RGB)) _pen.setCosmetic(True) def
__init__(self,x,y,c): QGraphicsRectItem.__init__(self,0,0,c,c) self.setPos(x,y)
self.setPen(CarreMosaiQ._pen) couleur = QColor(*(randint(*PLAGE_COULEURS)
for _ in 'RGB')) self.brush = QBrush(couleur) self.setBrush(self.brush)
232
Commençons par dessiner une scène avec un seul carré. La première fonction qu'on va
réaliser consiste à éclairer le carré lorsqu'il est survolé par le pointeur souris. Ceci est
courant — et utile ! — dans beaucoup d'interfaces utilisateur (menus, barres d'outils,
etc.) : on indique ainsi clairement l'élément qui sera affecté en cas de clic. Rappelons
que la scène sera bientôt remplie de milliers de petits carrés.
À cette fin, on utilise l'héritage et le patron de méthode présenté plus haut. Lorsque le
pointeur souris survole un QGraphicsItem, le framework appelle deux méthodes :
hoverEnterEvent quand il entre dans la surface de l'élément et hoverLeaveEvent
quand il en sort. Dès lors, on crée une classe CarreMosaiQ qui hérite de
QGraphicsRectItem ; il suffira alors de surcharger ces deux méthodes pour obtenir
l'effet voulu.
Voyons comment faire cela concrètement.
#-*- coding: latin_1 -*# MosaiQ v0.1
import sys
from random import randint
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QBrush, QPen, QPainter, QColor
from PyQt5.QtWidgets import QApplication, QGraphicsScene,
QGraphicsView,\
QGraphicsRectItem
# paramètres de configuration
# couleur du fond de la scène
COULEUR_FOND = "white"
# couleur utilisée pour le contour des carrés COULEUR_CONTOUR = "black" #
plage (min,max) pour les composantes RGB de la couleur des carrés
PLAGE_COULEURS = (50,250) # pourcentage utilisé pour éclairer les carrés
survolés FACTEUR_ECLAIRCISSSEMENT = 150 class
CarreMosaiQ(QGraphicsRectItem): _pen =
QPen(QColor(*COULEUR_CONTOUR_RGB)) _pen.setCosmetic(True) def
__init__(self,x,y,c): QGraphicsRectItem.__init__(self,0,0,c,c) self.setPos(x,y)
self.setPen(CarreMosaiQ._pen) couleur = QColor(*(randint(*PLAGE_COULEURS)
for _ in 'RGB')) self.brush = QBrush(couleur) self.setBrush(self.brush)
232
