2010-02-03 3 views
4

J'ai donc réussi à obtenir un graphique établi sur mon écran comme tel:Comment animer un graphique que j'ai dessiné dans PyQt?

class Window(QWidget): 
     #stuff 
     graphicsView = QGraphicsView(self) 
     scene = QGraphicsScene(self) 
     #draw our nodes and edges. 
     for i in range(0, len(MAIN_WORLD.currentMax.tour) - 1): 
      node = QGraphicsRectItem(MAIN_WORLD.currentMax.tour[i][0]/3, MAIN_WORLD.currentMax.tour[i][1]/3, 5, 5) 
      edge = QGraphicsLineItem(MAIN_WORLD.currentMax.tour[i][0]/3, MAIN_WORLD.currentMax.tour[i][1]/3, 
      MAIN_WORLD.currentMax.tour[i+1][0]/3, MAIN_WORLD.currentMax.tour[i+1][1]/3) 
      scene.addItem(node) 
      scene.addItem(edge) 

     #now go back and draw our connecting edge. Connects end to home node. 
     connectingEdge = QGraphicsLineItem(MAIN_WORLD.currentMax.tour[0][0]/3, MAIN_WORLD.currentMax.tour[0][1]/3, 
     MAIN_WORLD.currentMax.tour[len(MAIN_WORLD.currentMax.tour) - 1][0]/3, MAIN_WORLD.currentMax.tour[len(MAIN_WORLD.currentMax.tour) - 1][1]/3) 
     scene.addItem(connectingEdge) 
     graphicsView.setScene(scene) 

     hbox = QVBoxLayout(self) 
      #some more stuff.. 
     hbox.addWidget(graphicsView) 

     self.setLayout(hbox) 

Maintenant, les bords vont être constamment mise à jour, donc je veux être en mesure d'éliminer les arêtes et les redessiner . Comment puis je faire ça?

+0

voulez-vous être en mesure de déplacer les nœuds individuels sur une mise à jour, ou redessiner l'ensemble graphique sur une mise à jour? –

+0

On dirait qu'il veut redessiner le graphique entier sur une mise à jour, pour moi. Egalement intéressé par la réponse à cette question. – Chris

Répondre

2

QGraphicsScene gère le dessin des éléments que vous avez ajoutés. Si la position des rectangles ou des lignes, vous pouvez les mettre à jour a changé si vous ancienne sur eux:

for i in range(): 
    nodes[i] = node = QGraphicsRectItem() 
    scene.add(nodes[i]) 

Plus tard, vous pouvez mettre à jour la position d'un noeud:

nodes[j].setRect(newx, newy, newwidth, newheight) 

De même pour les lignes.

Si vous devez supprimer un, vous pouvez utiliser

scene.removeItem(nodes[22]) 
Questions connexes