根据QtSvg 模块文档:
Qt 支持 SVG 1.2 Tiny 的静态特性。目前不支持 ECMA 脚本和 DOM 操作。
因此,如果您要使用该QtSvg
模块,则仅限于此处描述的静态功能。
更新:
@Aleksandar 阅读您的答案后,我进一步调查以删除对QtSvG
模块的依赖关系。下面的代码实现了这个目标(诀窍是在调整容器大小之前加载图像):
import sys
from PyQt4 import QtCore
from PyQt4 import QtGui
from PyQt4.QtWebKit import QGraphicsWebView
class Scene(QtGui.QGraphicsScene):
def __init__(self):
super(QtGui.QGraphicsScene, self).__init__()
self.view = QtGui.QGraphicsView(self)
self.webview = QGraphicsWebView()
self.webview.setFlags(QtGui.QGraphicsItem.ItemClipsToShape)
self.webview.setCacheMode(QtGui.QGraphicsItem.NoCache)
self.addItem(self.webview)
self.webview.loadFinished.connect(self.svgLoaded)
def svgLoaded(self):
frame = self.webview.page().mainFrame()
fsize = frame.contentsSize()
self.webview.resize(QtCore.QSizeF(fsize))
self.view.resize(fsize.width() + 10, fsize.height() + 10)
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
v = Scene()
svg = QtCore.QUrl("Bitmap_VS_SVG.svg")
v.webview.load(svg)
v.view.show()
sys.exit(app.exec_())
代码可能需要更多的爱,但我现在没有时间。无论如何,我希望它对你有用。