使用 SVGWRITE 添加指向 Python 中 SVG 元素的链接
Adding links to SVG elements in Python using SVGWRITE
我正在尝试构建一个包含线条的 SVG,每一行都会 link 到同一文档中其他地方的一部分。然而,我一直收到 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://whosebug.com'))
link.add(test.line(start=(0,0),end=(100,100)))
test.save()
我在使用其他绘图元素(省略号、矩形等)时遇到了同样的错误,但这些元素当然可以作为 link.
的子元素
我错过了什么?
Python版本:2.7.10
svgwrite 版本:1.1.6(由 pkg_resources
报告)
您似乎在 svgwrite 中使用了完全错误的元素创建语法。
根据文档,链接是通过调用 svgwrite.container.Hyperlink and lines via a call to svgwrite.shapes.Line
创建的
修复后您仍然看不到任何东西,因为没有笔画集的线条是不可见的。我添加了一个描边,并将描边宽度设置得比下面的正常宽度宽,所以可以点击一些东西。
import svgwrite
test = svgwrite.Drawing('test.svg', profile='tiny',size=(100, 100))
link = test.add(svgwrite.container.Hyperlink('http://whosebug.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://whosebug.com"><line stroke="black" stroke-width="5" x1="0" x2="100" y1="0" y2="100" /></a></svg>
Robert Longson 提供了工作代码,但它不是我所看到的惯用代码。而且我认为语法是 "entirely wrong" 的建议具有误导性(尽管我愿意接受更有说服力的演示)。
在我的示例中删除配置文件规范可以修复它——并且在派生这个最小示例的较大项目中也能正常工作。这对我来说不是一个完全令人满意的答案,因为我不明白,基于阅读 tiny spec 为什么 链接导致了这个问题,但它是一个答案,在不偏离我见过的 svgwrite 的典型用途的情况下实现了预期的结果。
我正在尝试构建一个包含线条的 SVG,每一行都会 link 到同一文档中其他地方的一部分。然而,我一直收到 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://whosebug.com'))
link.add(test.line(start=(0,0),end=(100,100)))
test.save()
我在使用其他绘图元素(省略号、矩形等)时遇到了同样的错误,但这些元素当然可以作为 link.
的子元素我错过了什么?
Python版本:2.7.10
svgwrite 版本:1.1.6(由 pkg_resources
报告)
您似乎在 svgwrite 中使用了完全错误的元素创建语法。
根据文档,链接是通过调用 svgwrite.container.Hyperlink and lines via a call to svgwrite.shapes.Line
创建的修复后您仍然看不到任何东西,因为没有笔画集的线条是不可见的。我添加了一个描边,并将描边宽度设置得比下面的正常宽度宽,所以可以点击一些东西。
import svgwrite
test = svgwrite.Drawing('test.svg', profile='tiny',size=(100, 100))
link = test.add(svgwrite.container.Hyperlink('http://whosebug.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://whosebug.com"><line stroke="black" stroke-width="5" x1="0" x2="100" y1="0" y2="100" /></a></svg>
Robert Longson 提供了工作代码,但它不是我所看到的惯用代码。而且我认为语法是 "entirely wrong" 的建议具有误导性(尽管我愿意接受更有说服力的演示)。
在我的示例中删除配置文件规范可以修复它——并且在派生这个最小示例的较大项目中也能正常工作。这对我来说不是一个完全令人满意的答案,因为我不明白,基于阅读 tiny spec 为什么 链接导致了这个问题,但它是一个答案,在不偏离我见过的 svgwrite 的典型用途的情况下实现了预期的结果。