如何对我在 PyQt 中绘制的图形进行动画处理?

发布于 2024-08-19 18:02:38 字数 1253 浏览 3 评论 0原文

因此,我设法在屏幕上绘制了一个图形,如下所示:

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)

现在,边缘将不断更新,因此我希望能够删除这些边缘并重新绘制它们。我怎样才能做到这一点?

So I've managed to get a graph drawn up on my screen like such:

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)

Now, the edges are going to be updating constantly, so I want to be able to remove those edges and redraw them. How can I do that?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

差↓一点笑了 2024-08-26 18:02:38

QGraphicsScene 管理您添加到其中的项目的绘制。如果矩形或线条的位置发生了变化,您可以更新它们(如果您以前使用过它们):

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

稍后,您可以更新节点的位置:

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

对于线条也是如此。

如果您需要删除一个,您可以使用

scene.removeItem(nodes[22])

QGraphicsScene manages the drawing of the items you've added to it. If the position of the rectangles or lines has changed you can update them if you old onto them:

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

Later, you can update a node's position:

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

Similarly for lines.

If you need to remove one, you can use

scene.removeItem(nodes[22])
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文