Python Qt-更改QSvgWidget的颜色
我有一个SVG图像,可以添加到我的Qt布局中Python Qt-更改QSvgWidget的颜色,python,qt,svg,pyqt,Python,Qt,Svg,Pyqt,我有一个SVG图像,可以添加到我的Qt布局中 mySvg=QtSvg.QSvgWidget('/path/to/hello.svg')) layout.addWidget(mySvg) 渲染SVG的颜色为黑色。如何更改此设置?可能有一个更优雅的解决方案,但我通过python标准模块xml.etree.ElementTree直接编辑xml/svg内容来实现此功能。 我不知道svg规范,但在我的例子中,我想要更改颜色的路径有标签path。可能必须更改其他文件的标记。 使用第二种方法,您可以将svg
mySvg=QtSvg.QSvgWidget('/path/to/hello.svg'))
layout.addWidget(mySvg)
渲染SVG的颜色为黑色。如何更改此设置?可能有一个更优雅的解决方案,但我通过python标准模块
xml.etree.ElementTree
直接编辑xml/svg
内容来实现此功能。
我不知道svg
规范,但在我的例子中,我想要更改颜色的路径有标签path
。可能必须更改其他文件的标记。
使用第二种方法,您可以将svg
作为QByteArray
获取,您可以直接将其移交到QSvgWidget
中
在我的例子中,对svg
内容的一些其他修改是必要的——使用这种方法,您非常灵活。
也许将QSvgWidget
子类化以集成此功能(更有意义)
import xml.etree.ElementTree as Et
from PyQt5.QtCore import Qt, QByteArray
from PyQt5.QtGui import QColor
class Icon:
def __init__(self, icon_path, color=Qt.white):
self.tree = Et.parse(icon_path)
self.root = self.tree.getroot()
self._change_path_color(color)
def _change_path_color(self, color):
c = QColor(color)
paths = self.root.findall('.//{*}path')
for path in paths:
path.set('fill', c.name())
def get_QByteArray(self):
xmlstr = Et.tostring(self.root, encoding='utf8', method='xml')
return QByteArray(xmlstr)
编辑:xpath(//{*}path
)中的*通配符是python 3.8中的一个新特性。上一次。必须在xpath中指定命名空间的版本:
self.namespace = root.tag.split('}')[0].strip('{')
...
paths = self.root.findall(f'.//{{{self.namespace}}}path')