使用QSvgWidget,我已经从Codepen的示例成功运行了一些SVG代码。在浏览器中,动画非常流畅,例如60fps。在小部件中,它慢得多(同一台机器)。在渲染器上使用setFramesPerSecond设置fps似乎无济于事。它会更改framesPerSecond值,但不会加速动画。唯一要考虑的参数似乎是动画的持续时间,但这与设置帧频并不完全相同。
还有其他方法可以提高FPS吗?
下面的工作代码:
import sys
from PyQt5.QtWidgets import QApplication
from PyQt5.QtSvg import QSvgWidget, QSvgRenderer
svg_str = """
<svg viewBox="0 0 160 160" width="160" height="160">
<circle cx="80" cy="80" r="50" />
<g transform=" matrix(0.866, -0.5, 0.25, 0.433, 80, 80)">
<path d="M 0,70 A 65,70 0 0,0 65,0 5,5 0 0,1 75,0 75,70 0 0,1 0,70Z" fill="#FFF">
<animateTransform attributeName="transform" type="rotate" from="360 0 0" to="0 0 0" dur="1s" repeatCount="indefinite" />
</path>
</g>
<path d="M 50,0 A 50,50 0 0,0 -50,0Z" transform="matrix(0.866, -0.5, 0.5, 0.866, 80, 80)" />
</svg>
"""
svg_bytes = bytearray(svg_str, encoding='utf-8')
app = QApplication(sys.argv)
svgWidget = QSvgWidget()
svgWidget.renderer().load(svg_bytes)
svgWidget.setGeometry(500,500,1000,1000)
svgWidget.show()
print(svgWidget.renderer().framesPerSecond())
print(svgWidget.renderer().isValid())
print(svgWidget.renderer().animated())
sys.exit(app.exec_())