…
class PanneauInfo(QFrame):
def __init__(self,parent,scene):
…
scene.changed.connect(self.sceneChanged)
def sceneChanged(self,regions): txtNbCarres = "%5d" % CarreMosaiQ.nbInstances
if CarreMosaiQ.instanceSurvolee is None: txtTailleScene = '---' txtTailleVue = '--' else: tailleCarreScene = CarreMosaiQ.instanceSurvolee.taille() txtTailleScene =
'%e' % tailleCarreScene tailleCarreVue = CarreMosaiQ.instanceSurvolee \
.tailleDansVue(self.vue) txtTailleVue = '%4d pixels' % tailleCarreVue
self.labelNbCarres.setText("# carrés: "+txtNbCarres)
self.labelTailleCarreScene.setText("taille carré scène: " \ + txtTailleScene)
self.labelTailleCarreVue.setText("taille carré vue: "+txtTailleVue) class
CarreMosaiQ(QGraphicsRectItem): … def taille(self): return self.rect().width() def
tailleDansVue(self,vue): return vue.mapFromScene(self.taille(),0).x() vue.mapFromScene(0,0).x()
Pour activer la mise à jour du panneau, on connecte le signal changed de la scène à
une nouvelle méthode slot. Ceci permet de réagir à deux événements qui modifient
la scène : la fragmentation (suppression/création de carrés) et le changement de
carré sous pointeur, puisqu'on a programmé une surbrillance des carrés par
changement de brosse. Le seul souci est qu'on ne capte pas les zooms, qui sont des
événements sur la vue (donc, pas sur la scène) ; ces événements sont importants, car
ils nécessitent de changer le champ taille carré vue, donnant la dimension du carré
en pixels. Nous verrons un peu plus bas une petite astuce pour arranger cela dans
VueMosaiQ.
On formate le nombre d'instances comme un nombre entier à cinq chiffres.
Si aucun carré n'est survolé, on définit des symboles signifiant l'absence de donnée.
Sinon, on récupère la taille du carré survolé en unités scène (float Python), en
utilisant la nouvelle méthode taille ajoutée à la classe CarreMosaiQ (voir ) : on
formate ce nombre, qui peut être très grand en notation scientifique.
On demande au carré survolé par le pointeur de calculer sa taille en pixels. À cette
256
class PanneauInfo(QFrame):
def __init__(self,parent,scene):
…
scene.changed.connect(self.sceneChanged)
def sceneChanged(self,regions): txtNbCarres = "%5d" % CarreMosaiQ.nbInstances
if CarreMosaiQ.instanceSurvolee is None: txtTailleScene = '---' txtTailleVue = '--' else: tailleCarreScene = CarreMosaiQ.instanceSurvolee.taille() txtTailleScene =
'%e' % tailleCarreScene tailleCarreVue = CarreMosaiQ.instanceSurvolee \
.tailleDansVue(self.vue) txtTailleVue = '%4d pixels' % tailleCarreVue
self.labelNbCarres.setText("# carrés: "+txtNbCarres)
self.labelTailleCarreScene.setText("taille carré scène: " \ + txtTailleScene)
self.labelTailleCarreVue.setText("taille carré vue: "+txtTailleVue) class
CarreMosaiQ(QGraphicsRectItem): … def taille(self): return self.rect().width() def
tailleDansVue(self,vue): return vue.mapFromScene(self.taille(),0).x() vue.mapFromScene(0,0).x()
Pour activer la mise à jour du panneau, on connecte le signal changed de la scène à
une nouvelle méthode slot. Ceci permet de réagir à deux événements qui modifient
la scène : la fragmentation (suppression/création de carrés) et le changement de
carré sous pointeur, puisqu'on a programmé une surbrillance des carrés par
changement de brosse. Le seul souci est qu'on ne capte pas les zooms, qui sont des
événements sur la vue (donc, pas sur la scène) ; ces événements sont importants, car
ils nécessitent de changer le champ taille carré vue, donnant la dimension du carré
en pixels. Nous verrons un peu plus bas une petite astuce pour arranger cela dans
VueMosaiQ.
On formate le nombre d'instances comme un nombre entier à cinq chiffres.
Si aucun carré n'est survolé, on définit des symboles signifiant l'absence de donnée.
Sinon, on récupère la taille du carré survolé en unités scène (float Python), en
utilisant la nouvelle méthode taille ajoutée à la classe CarreMosaiQ (voir ) : on
formate ce nombre, qui peut être très grand en notation scientifique.
On demande au carré survolé par le pointeur de calculer sa taille en pixels. À cette
256
