Как анимировать график, который я нарисовал в PyQt? - PullRequest
4 голосов
/ 03 февраля 2010

Итак, мне удалось нарисовать график на моем экране, например:

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 Ответ

2 голосов
/ 06 февраля 2010

QGraphicsScene управляет отрисовкой добавленных вами предметов. Если положение прямоугольников или линий изменилось, вы можете обновить их, если вы использовали старые:

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

Позже вы можете обновить позицию узла:

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

Аналогично для линий.

Если вам нужно удалить один, вы можете использовать

scene.removeItem(nodes[22])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...