4


0

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)

現在、エッジは常に更新されるため、これらのエッジを削除して再描画できるようにしたいと考えています。 どうやってやるの?

1 Answer


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])