5. Zoom au clavier
Maintenant que nous avons programmé le zoom avec point d'ancrage, il est aisé de
fournir des alternatives à la molette souris (une action qui peut se relever fatigante à la
longue). Nous allons utiliser le clavier : la touche A fera un zoom avant et la touche Q
un zoom arrière — un choix jugé confortable pour les utilisateurs de claviers AZERTY.
Pour réaliser cela, on va — sans surprise — surcharger une nouvelle méthode de
QGraphicsView : keyPressEvent est appelée chaque fois qu'une touche est pressée ;
son argument est un QKeyEvent, qui fournit les détails sur la (ou les) touche(s)
enfoncée(s). Le protocole d'appel de cette méthode nous sera très utile ici : si on garde
la touche enfoncée assez longtemps, keyPressEvent est automatiquement appelée
plusieurs fois en séquence (c'est ce qu'on a l'habitude de voir dans tous les éditeurs de
texte) ; on peut ainsi obtenir à peu de frais un effet de zoom continu en maintenant la
touche A ou Q enfoncée.
…
FACTEUR_ZOOM_FIN = 1.02
…
class VueMosaiQ(QGraphicsView):
…
def keyPressEvent(self,keyEvent):
key = keyEvent.key()
if key == Qt.Key_A:
self.zoom(FACTEUR_ZOOM_FIN)
elif key == Qt.Key_Q:
self.zoom(-FACTEUR_ZOOM_FIN)
else:
QGraphicsView.keyPressEvent(self,keyEvent)
Pour retrouver quelle touche a été enfoncée, on appelle la méthode key() ; cette
méthode renvoie un code défini dans l'énuméré Qt.Key qui donne un nom symbolique à
toutes les touches du clavier. Il suffit dès lors d'intercepter les touches A/Q et d'appeler
la fonction zoom avec un facteur positif ou négatif, respectivement. Pour rendre les
choses configurables, on a placé ce facteur dans une variable globale. La valeur
choisie est petite (2 %), car on veut un effet fluide et on s'attend à des appels en
répétition, en gardant les touches enfoncées. Comme déjà pratiqué, si on tombe sur une
touche non reconnue par l'application, on appelle la méthode parente keyPressEvent
pour garder tous les comportements par défaut.
À l'exécution, on peut voir que les touches A et Q ont l'effet voulu, avec un zoom
245
Précédent

- 246/494

Suivant