Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.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

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 如何使用PySide访问和编辑svg节点?_Python_Svg_Pyside - Fatal编程技术网

Python 如何使用PySide访问和编辑svg节点?

Python 如何使用PySide访问和编辑svg节点?,python,svg,pyside,Python,Svg,Pyside,我正在使用PySide将svg图像加载到Qt-gui中。svg由inkscape制成,由层和元素组成(rect,circle,path,g组…) 这是我正在使用的代码: from PySide import QtSvg

我正在使用PySidesvg图像加载到Qt-gui中。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_())       

导入后,是否可以访问和编辑/修改特定节点或元素,例如修改路径或更改矩形的颜色?

由于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_()) 
如果名称=“\uuuuu main\uuuuuuuu”:
doc=QDomDocument(“doc”)
file=QFile(“image.svg”)
如果不是file.open(QIODevice.ReadOnly):
打印(“无法打开文件”)
出口(-1)
如果不是doc.setContent(文件):
打印(“无法解析内容”);
file.close()文件
出口(-1)
file.close()文件
根=doc.elementsByTagName(“svg”)
如果根.size()小于1:
打印(“找不到根”)
出口(-1)
#更改第一条路径的颜色
root=root.at(0).toElement()
path=root.firstChild().toElement()
path.setAttribute(“填充”,“#FF0000”)
app=QApplication(sys.argv)
svgWidget=QtSvg.QSvgWidget()
svgWidget.load(doc.toByteArray())
svgWidget.show()
sys.exit(app.exec_())

谢谢,它工作得很好。现在我“只是”必须学习如何遍历DOM和查找元素,就像我以前使用其他语言一样。