8

私はPythonとGTK3を使用してUbuntu12.04でアプリを作成しています。問題は、Webからの画像ファイルを使用してアプリで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 に答える