7

我正在尝试在 Python 3.2 中使用 rsvg,但我不断收到导入错误。我已经安装了所有的 librsvg 包和 cairo。我在网上找不到任何关于要安装什么才能让它工作的东西。我确实听说 rsvg 模块自 2005 年以来一直没有更新,所以它只是与 Python 3.2 不兼容,还是我可以尝试安装其他东西?或者,如果 rsvg 不起作用,是否有人对通过 Python 显示 SVG 文件的简单方法有任何建议(基本上只是显示图像)?

编辑:我得到的错误是:'ImportError:没有名为 rsvg 的模块'

此错误未在 python2 中显示

提前致谢

4

1 回答 1

16

我在试图弄清楚如何做到这一点时遇到了很多困难。我希望其他人找到这个答案并为自己节省很多时间!

对于 Python 3,最初用 C 编写的几个库(包括GTKClutterlibrsvg)的 Python 语言绑定已被GObject 自省库所取代,后者是从 C“对象”动态生成 Python 对象的 Python 代码。

为了librsvg在 Python 3 上使用,首先安装必要的 GObject 自省库(除了 Python 3 Cairo 库)。例如,在 Ubuntu 13.10 上:

sudo apt-get install gir1.2-rsvg-2.0 python3-cairo python-gi-cairo python3-gi

然后用下面的代码测试一下。

#!/usr/bin/env python3                                                          

# `gi.repository` is a special Python package that dynamically generates objects
import gi
gi.require_version('Rsvg', '2.0')
from gi.repository import Rsvg
import cairo

INPUTFILE = 'tiger.svg'

if __name__ == '__main__':
    # create the cairo context                                                  
    surface = cairo.SVGSurface('myoutput.svg', 580, 530)
    context = cairo.Context(surface)

    # use rsvg to render the cairo context                                      
    handle = Rsvg.Handle()
    svg = handle.new_from_file(INPUTFILE)
    svg.render_cairo(context)

为了在您的项目中实现这一点,

  1. 更改cairo.SVGSurface为您要绘制的任何表面,并且
  2. 将 的值修改为INPUTFILE您要渲染的 SVG 文件的名称。
于 2013-11-02T16:27:44.080 回答