【问题标题】:pyQt with interactive SVG images带有交互式 SVG 图像的 pyQt
【发布时间】:2012-10-30 22:47:29
【问题描述】:

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

让我更具体地说明我要查找的内容。假设我有一个绘制一个框的 SVG 文件。当我将鼠标悬停在该框上时,我想更改颜色以触发悬停事件。我必须编辑文件并重绘图像吗?感觉应该有办法用 Qt 制作交互式 SVG 文件。

【问题讨论】:

    标签: python pyqt


    【解决方案1】:

    我遇到了同样的问题,您的问题为我指明了正确的方向(使用 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 的大小。

    【讨论】:

      【解决方案2】:

      我想出了一个办法,但我认为这不是最好的办法。我有两个文件: 白色.svg 绿色.svg

      在悬停功能中,我渲染图像并强制显示它。

      def hoverEnterEvent(self, event):
          self.render.load('green.svg')
          self.show()
      
      def hoverLeaveEvent(self, event):
          self.render.load('white.svg')
          self.show()
      

      self 是一个 QGraphicsSvgItem

      我不喜欢这种方式,因为我现在必须从一个中插入两个 .svg 文件。如果有人有更好的解决方案,我愿意接受建议。

      【讨论】:

        猜你喜欢
        • 2014-08-07
        • 2011-11-19
        • 2017-09-28
        • 2015-05-10
        • 2015-09-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多