【问题标题】:Adding links to SVG elements in Python using SVGWRITE使用 SVGWRITE 在 Python 中添加指向 SVG 元素的链接
【发布时间】:2018-07-28 07:23:16
【问题描述】:

我正在尝试构建一个包含线条的 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报告)

【问题讨论】:

    标签: python svg svgwrite


    【解决方案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>

    【讨论】:

    • 感谢您的建议;我的 MWE 中的语法确实有效,从您可以找到的 svgwrite 使用示例中调用创建的对象而不是模块本身似乎更典型。 (我不是真正的程序员,尤其不是 OO 程序员)。你完全正确,没有指定stroke_widthcolor 什么都不会看到你的版本有效。但只需删除 profile='tiny' 也可以。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-11
      • 2022-01-16
      • 1970-01-01
      • 2015-12-13
      • 2016-07-24
      • 1970-01-01
      • 2016-05-24
      • 2023-03-11
      相关资源
      最近更新 更多