2010-02-03 25 views
4

所以我設法讓我的屏幕上繪製像這樣的圖:如何動畫我在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) 

現在,邊緣會被不斷更新,所以我希望能夠去除這些邊和他們重繪。我怎樣才能做到這一點?

+0

你想能夠上的更新更新移動節點單或重新繪製整個圖形? – 2010-02-03 13:21:00

+0

這聽起來像是他想要在整個更新上重繪整個圖表給我。也對這個問題的答案感興趣。 – Chris 2010-02-03 14:31:38

回答

2

QGraphicsScene管理您添加到其中的項目的圖紙。如果矩形或線的位置發生了變化,你可以更新他們,如果你到老它們:

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

後來,你可以更新節點的位置:

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

同樣的線路。

如果您需要刪除一個,你可以使用

scene.removeItem(nodes[22])