带有交互式SVG图像的pyQt

发布于 2021-01-29 16:12:39

如何将交互式SVG文件添加到QGraphicsScene?我可以添加一个交互式SVG文件,但它只是显示为静态图像。我正在阅读有关QGraphicsWebView的内容,但无法弄清楚如何向其中添加SVG文件,并且缺少示例。

让我更具体地说明我要寻找的内容。假设我有一个绘制框的SVG文件。当我将鼠标悬停在该框上时,我想更改颜色以触发悬停事件。我是否需要编辑文件并重新绘制图像?感觉应该有一种使用Qt进行交互式SVG文件的方法。

关注者
0
被浏览
78
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    我遇到了同样的问题,而您的问题为我指明了正确的方向(使用QGraphicsWebView())。解决方法实际上非常简单:

    import sys
    from PyQt4 import QtCore, QtGui, QtSvg
    from PyQt4.QtWebKit import QGraphicsWebView
    if __name__ == "__main__":
        app = QtGui.QApplication(sys.argv)
    
        scene = QtGui.QGraphicsScene()
        view = QtGui.QGraphicsView(scene)
    
        br = QtSvg.QGraphicsSvgItem("C:\your_interactive_svg.svg").boundingRect()
    
        webview = QGraphicsWebView()
        webview.load(QtCore.QUrl("C:\your_interactive_svg.svg"))
        webview.setFlags(QtGui.QGraphicsItem.ItemClipsToShape)
        webview.setCacheMode(QtGui.QGraphicsItem.NoCache)
        webview.resize(br.width(), br.height())
    
        scene.addItem(webview)
        view.resize(br.width()+10, br.height()+10)
        view.show()
        sys.exit(app.exec_())
    

    它对我来说很完美(脚本和其他内容)。

    如您所见,我也将svg加载为QGraphicsSvgItem,因为我不知道其他方法来获取svg的大小。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看