使用SVGWRITE在Python中添加指向SVG元素的链接

时间:2018-02-17 15:17:55

标签: python svg svgwrite

我正在尝试构建一个以行为特征的SVG,每一行都链接到同一文档中的其他部分。我不断得到一个ValueError,然而,说明&#34; Invalid children 'line' for svg-element <a>.&#34;

此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报告)

2 个答案:

答案 0 :(得分:1)

您似乎在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>

答案 1 :(得分:0)

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

在我的示例中删除配置文件规范会修复它 - 并且在从中派生此最小示例的较大项目中也可以正常工作。这对我来说不是一个完全令人满意的答案,因为我不明白,基于阅读tiny spec 为什么链接导致了这个问题,但这是一个答案,它实现了所需结果而不偏离我见过的svgwrite的典型用法。