#python #svg #pyside
#python #svg #pyside
Вопрос:
Я использую PySide для загрузки изображения svg в графический интерфейс Qt. SVG, созданный с помощью inkscape, состоит из слоев и элементов ( rect
, circle
, path
, g
групп …).
Это код, который я использую:
from PySide import QtSvg
from PySide.QtCore import QLocale
from PySide.QtGui import *
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
svgWidget = QtSvg.QSvgWidget('file.svg')
svgWidget.show()
sys.exit(app.exec_())
Можно ли после импорта получить доступ и отредактировать / модифицировать определенный узел или элемент, например, изменить путь или изменить цвет прямоугольника?
Ответ №1:
Поскольку SVG — это XML-файл, вы можете открыть его с помощью QDomDocument
и отредактировать.
Пример изменения цвета первого пути:
if __name__ == "__main__":
doc = QDomDocument("doc")
file = QFile("image.svg")
if not file.open(QIODevice.ReadOnly):
print("Cannot open the file")
exit(-1)
if not doc.setContent(file):
print("Cannot parse the content");
file.close()
exit(-1)
file.close()
roots = doc.elementsByTagName("svg")
if roots.size() < 1:
print("Cannot find root")
exit(-1)
# Change the color of the first path
root = roots.at(0).toElement()
path = root.firstChild().toElement()
path.setAttribute("fill", "#FF0000")
app = QApplication(sys.argv)
svgWidget = QtSvg.QSvgWidget()
svgWidget.load(doc.toByteArray())
svgWidget.show()
sys.exit(app.exec_())
Комментарии:
1. Спасибо, это работает отлично. Теперь мне «просто» нужно научиться обходить DOM и находить элементы, как я привык делать с другими языками.