Python 在PyQt窗口中显示SVG图像的简单方法
我正在寻找一种简单可靠的方法,用于在PyQt窗口中插入SVG图像。更准确地说,我想知道是否有可能将SVG图像应用于QLabel。这可以用于PNG图像(参见下面的代码) 编辑:Python 在PyQt窗口中显示SVG图像的简单方法,python,svg,pyqt,Python,Svg,Pyqt,我正在寻找一种简单可靠的方法,用于在PyQt窗口中插入SVG图像。更准确地说,我想知道是否有可能将SVG图像应用于QLabel。这可以用于PNG图像(参见下面的代码) 编辑: 我需要保留SVG图像的矢量方面,以便调整大小。因此,在显示之前将图像转换为PNG是没有帮助的。QLabel只能加载一个pixmap。如果需要矢量图形,请使用QtSvg.QSvgWidget()并在不转换的情况下加载svg文件: import sys from PyQt4 import QtGui, QtSvg app =
我需要保留SVG图像的矢量方面,以便调整大小。因此,在显示之前将图像转换为PNG是没有帮助的。
QLabel
只能加载一个pixmap。如果需要矢量图形,请使用QtSvg.QSvgWidget()
并在不转换的情况下加载svg文件:
import sys
from PyQt4 import QtGui, QtSvg
app = QtGui.QApplication(sys.argv)
svgWidget = QtSvg.QSvgWidget('Zeichen_123.svg')
svgWidget.setGeometry(50,50,759,668)
svgWidget.show()
sys.exit(app.exec_())
或者通过QtSvg.qsvgrender
直接渲染到QPaintDevice
的任何子类,例如,渲染到QLabel
:
app = QtGui.QApplication(sys.argv)
widget = QtGui.QLabel()
widget.setGeometry(50,200,500,500)
renderer = QtSvg.QSvgRenderer('Zeichen_123.svg')
widget.resize(renderer.defaultSize())
painter = QtGui.QPainter(widget)
painter.restore()
renderer.render(painter)
widget.show()
sys.exit(app.exec_())
我使用GTK而不是Qt,但看起来很相关。除了您链接的帖子显示了Qt(而不是PyQt)的解决方案之外,它还用于将SVG转换为PNG。我可能还不够清楚,但这不是我需要的。我想保留矢量格式,以便调整图像大小。对不起。我希望它能包含足够的信息,让您能够将其应用于Python,但我知道这样做比使用完全基于Python的解决方案要麻烦得多:我知道,当我试图用Python编写GTK时,查看基于C的内容是很痛苦的。但无论如何,我怀疑您必须在Pixmap中显示SVG,这意味着您无法避免矢量到位图的转换。但是您的代码可以根据缩放命令重新呈现SVG;这就是我在GTK中对SVG所做的。啊,我第一次没有得到它:代码在运行时将SVG渲染到给定的比例。这实际上是一个很好的解决方案!我将尝试找出如何为python(PyQt)编写此代码。祝您好运!如果您陷入困境,您可以将新代码添加到问题中,或者只问一个新问题,可能会链接回这个问题。或者,如果你写了一个很好的解决方案,把它作为一个答案贴在这里:你可能会学到一些要点,它可能会帮助未来的读者。这正是我想要的!非常感谢。我只是遇到了一个问题:我想要显示的SVG图像包含文本,它不会显示。我用黑盒子代替字母。。。知道吗?我想这可能是个新问题。在使用svg文件中的代码询问之前:其他查看器是否正确显示svg文件?svg文件中是简单标记还是简单标记?见:
app = QtGui.QApplication(sys.argv)
widget = QtGui.QLabel()
widget.setGeometry(50,200,500,500)
renderer = QtSvg.QSvgRenderer('Zeichen_123.svg')
widget.resize(renderer.defaultSize())
painter = QtGui.QPainter(widget)
painter.restore()
renderer.render(painter)
widget.show()
sys.exit(app.exec_())