J'ai besoin de personnaliser le processus de dessin d'un QGraphicsView, et donc je remplacer la méthode drawItems comme ceci:PyQt: Redéfinition QGraphicsView.drawItems
self.graphicsview.drawItems=self.drawer.drawItems
où self.graphicsview
est un QGraphicsView et self.drawer
est une classe personnalisée avec une méthode drawItems
.
Dans cette méthode, je vérifie quelques drapeaux pour décider comment dessiner chaque élément, puis appelez item.paint
, comme ceci:
def drawItems(self, painter, items, options):
for item in items:
print "Processing", item
# ... Do checking ...
item.paint(painter, options, self.target)
self.target
est-QGraphicsScene du QGraphicsView.
Cependant, une fois qu'il atteint item.paint
, il sort de la boucle - sans aucune erreur. Si je mets des conditions autour de la peinture, et pour chaque type possible de QGraphicsItem, collez le code qui est supposé être exécuté (en regardant les sources git Qt), tout fonctionne.
Pas une très belle solution cependant ... Et je ne comprends pas comment il pourrait même sortir de la boucle?
J'ai juste essayé d'ajouter cette instruction, 'print item.paint', pour vérifier quelle méthode de peinture serait appelée. Il a imprimé "". Intégré? J'ai également un objet personnalisé dérivé de QGraphicsItem, et l'instruction ci-dessus donne "bound method of ..." à la place. Que signifie cette différence? –
carlpett
"built-in" signifie que le code compilé dans la bibliothèque Qt est appelé alors que "méthode liée" signifie que le code Python est appelé. –