Load and show an image from the web in Python with Gtk 3?
This will work;
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)
I haven't found any documentation on PixBuf. Therefore, I can't answer which arguments new_from_stream
takes. For the record, the error message I was given was
TypeError: new_from_stream() takes exactly 2 arguments (1 given)
But I can give you a simple solution which might even improve your application. Saving the image to a temporary file includes caching.
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))
I'm aware it's not the cleanest code (URL could be malformed, resource opening could fail, ...) but it should be obvious whats's the idea behind.