从svg在PyGtk3中创建pixbuf作为字符串

时间:2015-08-02 19:20:21

标签: python svg gtk pygtk

我们说我在内存中读取了一个svg文件。在操作字符串(改变颜色,渐变等)之后,我不想包括(现在修改过的)svg"文件"在使用PyGTK3编写的图形用户界面中。最简单的方法是将svg再次保存为文件,并保存为

Gtk.Image.new_from_file(modified_svg)

由于我不想做很多事情,因此从慢速硬盘中写入/读取了大量不必要的数据。有没有办法从内存中的svg-string直接创建Image? (我想过类似pixbuf的东西,但我找不到东西)

1 个答案:

答案 0 :(得分:2)

您必须使用GdkPixbuf.PixbufLoaderdocumentation)。这就是它的样子:

#!/usr/bin/env python3
from gi.repository import Gtk, WebKit, GLib, GdkPixbuf

svg = """
 <svg width="350" height="110">
   <rect width="300" height="100" style="fill:rgb(0,0,255);stroke-width:3;stroke:rgb(0,0,0)" />
   </svg> 
"""

class Window(Gtk.Window):
    def __init__(self):
        super().__init__()
        self.connect('delete-event', Gtk.main_quit)

        loader = GdkPixbuf.PixbufLoader()
        loader.write(svg.encode())
        loader.close()
        pixbuf = loader.get_pixbuf()
        image = Gtk.Image.new_from_pixbuf(pixbuf)

        self.add(image)
        self.show_all()


if __name__ == "__main__":
    Window()
    Gtk.main()

如果您已经拥有Gtk.Image并且只想更新它,则可以使用Gtk.Image.set_from_pixbuf()代替Gtk.Image.new_from_pixbuf()