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

wa4*_*557 1 python gtk svg pygtk

假设我在内存中读取了一个 svg 文件。操作字符串(更改颜色、渐变等)后,我不想将(现已修改的)svg“文件”包含在使用 PyGTK3 编写的图形用户界面中。最简单的方法是将 svg 再次保存为文件并保存为类似的文件

Gtk.Image.new_from_file(modified_svg)
Run Code Online (Sandbox Code Playgroud)

由于我不想经常这样做,因此有很多不必要的数据从慢速硬盘写入/读取。有没有办法直接从内存中的 svg 字符串创建图像?(我想到了类似于 pixbuf 的东西,但我找不到东西)

ely*_*ya5 5

您必须使用GdkPixbuf.PixbufLoader文档)。它看起来是这样的:

#!/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()
Run Code Online (Sandbox Code Playgroud)

如果您已经有一个 Gtk.Image 并且您只想更新它,您可以使用Gtk.Image.set_from_pixbuf()而不是Gtk.Image.new_from_pixbuf().