使用 Gtk 3 在 Python 中加载并显示来自网络的图像?

使用 Gtk 3 在 Python 中加载并显示来自网络的图像?

我正在使用 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))

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

答案1

根据文档new_from_stream()需要Gio.InputStreamGio.Cancellable作为参数。

您还可以将图像保存在磁盘上并在需要时删除。这是一个非常基本的示例:

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


def quit_event(widget, event):
    os.remove(imgname)
    Gtk.main_quit()

imgname = '1338.jpg'
url = 'http://lolcat.com/images/lolcats/'+imgname
response = urllib2.urlopen(url)
with open(imgname, 'wb') as img:
    img.write(response.read())

image = Gtk.Image()
pb = Pixbuf.new_from_file(imgname)
image.set_from_pixbuf(pb)

window = Gtk.Window()
window.connect('delete-event', quit_event)
window.add(image)
window.show_all()
Gtk.main()

但是您应该写入一个更好的位置,可能是 /tmp 或用户指定的目录。

相关内容