1

我正在尝试构建一个具有线条的 SVG,每条线都将链接到同一文档中其他地方的一个部分。但是,我不断收到一个ValueError,说明“ Invalid children 'line' for svg-element <a>.

此 MWE 重现错误:

import svgwrite

test = svgwrite.Drawing('test.svg', profile='tiny',size=(100, 100))

link = test.add(test.a('http://stackoverflow.com'))
link.add(test.line(start=(0,0),end=(100,100)))

test.save()

我在使用其他绘图元素(省略号、矩形等)时遇到了同样的错误,但这些元素当然可以作为链接的子元素。

我错过了什么?

Python 版本:2.7.10 svgwrite 版本:1.1.6(报告人pkg_resources

4

2 回答 2

2

您似乎在 svgwrite 中使用完全错误的语法来创建元素。

根据文档,链接是通过调用svgwrite.container.Hyperlink创建的,而行是通过调用svgwrite.shapes.Line 创建的

一旦解决了这个问题,你仍然不会看到任何东西,因为没有笔画集的线条是不可见的。我已经添加了一个笔画,并将笔画宽度设置为比下面的正常宽度更宽,所以有一些东西可以点击。

import svgwrite

test = svgwrite.Drawing('test.svg', profile='tiny',size=(100, 100))

link = test.add(svgwrite.container.Hyperlink('http://stackoverflow.com'))
link.add(svgwrite.shapes.Line(start=(0,0),end=(100,100),stroke_width="5",stroke="black"))

test.save()

这会产生以下输出

<?xml version="1.0" encoding="utf-8" ?>
<svg baseProfile="tiny" height="100" version="1.2" width="100" xmlns="http://www.w3.org/2000/svg" xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:xlink="http://www.w3.org/1999/xlink"><defs /><a target="_blank" xlink:href="http://stackoverflow.com"><line stroke="black" stroke-width="5" x1="0" x2="100" y1="0" y2="100" /></a></svg>

于 2018-02-17T16:21:49.857 回答
0

Robert Longson提供了工作代码,但从我所看到的来看,它并不是惯用的。而且我认为语法“完全错误”的建议具有误导性(尽管我愿意接受更有说服力的演示)。

在我的示例中删除配置文件规范可以修复它——并且在派生这个最小示例的较大项目中也能正常工作。这对我来说不是一个完全令人满意的答案,因为我不明白,基于阅读微小的规范 ,为什么链接会导致这个问题,但它是一个答案,它在不偏离 svgwrite 的典型用途的情况下达到了预期的结果我见过。

于 2018-02-17T17:28:16.423 回答