8

我正在使用 Python 和 GTK 3 在 Ubuntu 12.04 上编写应用程序。我遇到的问题是,我不知道应该如何在我的应用程序中使用来自网络的图像文件显示 Gtk.Image。

据我所知,这是:

from gi.repository import Gtk
from gi.repository.GdkPixbuf import Pixbuf
import urllib2

url = 'http://lolcat.com/images/lolcats/1338.jpg'
response = urllib2.urlopen(url)
image = Gtk.Image()
image.set_from_pixbuf(Pixbuf.new_from_stream(response))

我认为除了最后一行之外一切都是正确的。

4

2 回答 2

14

这将起作用;

from gi.repository import Gtk
from gi.repository.GdkPixbuf import Pixbuf
from gi.repository import Gio
import urllib

url = 'http://lolcat.com/images/lolcats/1338.jpg'
response = urllib.request.urlopen(url)
input_stream = Gio.MemoryInputStream.new_from_data(response.read(), None)
pixbuf = Pixbuf.new_from_stream(input_stream, None)
image = Gtk.Image()
image.set_from_pixbuf(pixbuf)
于 2013-12-03T14:44:49.900 回答
2

我还没有找到任何关于 PixBuf 的文档。因此,我无法回答new_from_stream需要哪些论据。作为记录,我收到的错误信息是

TypeError: new_from_stream() 正好需要 2 个参数(1 个给定)

但我可以给你一个简单的解决方案,甚至可以改进你的应用程序。将图像保存到临时文件包括缓存。

from gi.repository import Gtk
from gi.repository.GdkPixbuf import Pixbuf
import urllib2

url = 'http://lolcat.com/images/lolcats/1338.jpg'
response = urllib2.urlopen(url)
fname = url.split("/")[-1]
f = open(fname, "wb")
f.write(response.read())
f.close()
response.close()
image = Gtk.Image()
image.set_from_pixbuf(Pixbuf.new_from_file(fname))

我知道这不是最干净的代码(URL 可能格式错误,资源打开可能失败,......)但它背后的想法应该是显而易见的。

于 2012-07-18T22:04:25.040 回答