Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在PyQt窗口中显示SVG图像的简单方法_Python_Svg_Pyqt - Fatal编程技术网

Python 在PyQt窗口中显示SVG图像的简单方法

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 =

我正在寻找一种简单可靠的方法,用于在PyQt窗口中插入SVG图像。更准确地说,我想知道是否有可能将SVG图像应用于QLabel。这可以用于PNG图像(参见下面的代码)

编辑:


我需要保留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_())