2012-07-18 57 views
4

我正在用Python和GTK 3在Ubuntu 12.04上編寫一個應用程序。我遇到的問題是我無法弄清楚我應該如何在Web應用程序中用圖像文件顯示Gtk.Image。使用Gtk 3在Python中加載並顯示圖像?

這是據我已經來了:

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

我還沒有找到關於PixBuf的任何文檔。因此,我無法回答new_from_stream採用哪個參數。爲了記錄在案,我得到的錯誤信息是

TypeError: new_from_stream() takes exactly 2 arguments (1 given)

但我可以給你一個簡單的解決方案,它甚至可能會提高你的應用程序。將圖像保存到臨時文件包括緩存。

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)) 

我知道這不是最乾淨的代碼(網址就可能會畸形,資源開放可能會失敗,...),但它應該是顯而易見的是什麼背後的想法。

5

這將工作;

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

url = 'http://lolcat.com/images/lolcats/1338.jpg' 
response = urllib2.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) 
相關問題