从 svg 作为字符串在 PyGtk3 中创建 pixbuf
Create pixbuf in PyGtk3 from svg as string
假设我在内存中读取了一个 svg 文件。处理字符串(更改颜色、渐变等)后,我不想在使用 PyGTK3 编写的图形用户界面中包含(现已修改的)svg "file"。最简单的方法是将 svg 再次保存为文件,并保存为类似
的文件
Gtk.Image.new_from_file(modified_svg)
因为我不想经常这样做,所以慢速硬盘中有很多不必要的数据 writing/reading。有没有办法直接从内存中的 svg-string 创建图像? (我想过类似于 pixbuf 的东西,但我找不到)
您必须使用 GdkPixbuf.PixbufLoader
(documentation)。这是它的样子:
#!/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()
。
假设我在内存中读取了一个 svg 文件。处理字符串(更改颜色、渐变等)后,我不想在使用 PyGTK3 编写的图形用户界面中包含(现已修改的)svg "file"。最简单的方法是将 svg 再次保存为文件,并保存为类似
的文件Gtk.Image.new_from_file(modified_svg)
因为我不想经常这样做,所以慢速硬盘中有很多不必要的数据 writing/reading。有没有办法直接从内存中的 svg-string 创建图像? (我想过类似于 pixbuf 的东西,但我找不到)
您必须使用 GdkPixbuf.PixbufLoader
(documentation)。这是它的样子:
#!/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()
。