如何使用Gdk3从文件创建PixBuf?

10

环境:Python3

库:

from gi.repository import Gtk, Gdk
import cairo

我想从文件创建一个'pixbuf',但是在Gdk3中这个方法已经不存在了。

pb = Gdk.pixbuf_new_from_file('sunshine.png')
Gdk.cairo_set_source_pixbuf(cr, pb, 0, 0)

结果为:AttributeError: 'gi.repository.Gdk'对象没有属性'pixbuf_new_from_file'

有人知道如何在Gdk3中实现吗? 看起来Gdk3只支持这些方法:

gdk_pixbuf_get_from_window
gdk_pixbuf_get_from_surface

更新

我自己找到了:

image = Gtk.Image()
image.set_from_file('sunshine.png')
pixbuf = image.get_pixbuf()
Gdk.cairo_set_source_pixbuf(cr, pixbuf, 10, 10)
2个回答

24

这个问题很久远了,但或许对某些人有所帮助:

from gi.repository import GdkPixbuf
pixbuf = GdkPixbuf.Pixbuf.new_from_file('sunshine.png')

在GdkPixbuf._version == '2.0'上进行了测试


2
也许这个问题在2013年已经过时了,但是这个答案在2017年仍然完美适用 :) - Jacob Vlijm

1
我对Python不是很了解,但通常情况下,您不应直接使用gtk image来加载文件。请改用GdkPixbuf,因为它具有更好的错误处理能力。在Python中没有属性“pixbuf new from file”的原因是,对于大部分GdkPixbuf处理,仍在使用(在C中)gdk-pixbuf-2.0。为什么他们没有移植或仍然保留它,我不知道。在Python中,您必须找到“gdk pixbuf”模块,而不是使用GDK3,正如Schcriher所指出的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接