Seite 1 von 1

Internet-Bild in einem GUI anzeigen

Verfasst: Dienstag 16. September 2008, 11:22
von MaXXLy
Hallo Leute,

ich parse einen RSS-Feed in dem sich auch URLs zu kleine Bildchen befinden. Um diese zur Laufzeit in einem GTk anzuzeigen, speichere ich diese in einen Tempfile. Etwa so:

Code: Alles auswählen

from urllib import urlretrieve
import tempfile
			
id, temp_file = tempfile.mkstemp() 
			
urlretrieve(XML-Image, temp_file)
		
img = gtk.Image()
img.set_from_file(temp_file)
img.show()
Ich wäre nicht ich, wenn ich mir nicht unsicher wär!
Ist das eine gängige Lösung oder gibt es noch Bessere? Kann ich das auch so bewerkstelligen, dass ich nicht speichern muss?

Danke für Erleuchtungen

Re: Internet-Bild in einem GUI anzeigen

Verfasst: Dienstag 16. September 2008, 11:36
von Leonidas
MaXXLy hat geschrieben:Ist das eine gängige Lösung oder gibt es noch Bessere? Kann ich das auch so bewerkstelligen, dass ich nicht speichern muss?
Natürlich, denn zwischenspeichern ist doch mehr als hässlich. Unnötiger Festplatten-E/A. ``gtk.Image.set_from_pixbuf`` wäre schon besser. Wie das geht, kannst du in meinem solistic.py nachsehen, dort nutze ich das. In deinem Fall wirst du keinen ``gtk.gdk.PixbufLoader`` brauchen, nehme ich an, da reicht ``gtk.gdk.Pixbuf``.

Ich habe es mir erlaubt den Thread zu verschieben. Der hat schließlich mehr mit PyGTK was zu tun als mit Allgemeinen Fragen.

Danke für die Hilfe

Verfasst: Dienstag 16. September 2008, 14:15
von MaXXLy
Ich wusste: Du kannst es besser! :!:
Aber, ich hole auf! :D

Ich habe Folgendes:

Code: Alles auswählen

import urllib
			
url_handler = urllib.urlopen(List[2])
img_data = url_handler.read()
			
img_loader = gtk.gdk.PixbufLoader()
img_loader.write(img_data)
			
img_buffer = img_loader.get_pixbuf()	
			
img = gtk.Image()	
img.set_from_pixbuf(img_buffer)
			
url_handler.close()
img_loader.close()
			
self.dialog.action_area.pack_start(img)		
Aus der Beschreibungen
gtk.gdk.Pixbuf — an object containing a client side image.
gtk.gdk.PixbufLoader — an object providing application-driven progressive image loading

entnehme ich, dass Pixbuf nicht funktioniert.
Wie siehst Du das?

Verfasst: Dienstag 16. September 2008, 18:37
von Leonidas
PixbufLoader ist nur sinnvoll, wenn du Bilder hast, die allmählich aufgebaut werden sollen, je nachdem wie viele Daten schon da sind, wie eben Interlaced PNGs, JPEGs etc. Wenn du aber schon die ganze Datei in einem Stück hast (und das hast du ja nach Zeile 5), dann reicht ein Pixbuf allemal.

Bitte zeig es mir!

Verfasst: Mittwoch 17. September 2008, 20:21
von MaXXLy
Ich noch mal: Ich bekomme es nicht hin. Habe auch nur Beispiele mit PixbufLoader() im Netz gefunden. Wie bekomme ich das Bild mit urllib in das gtk.Image?

Max

Verfasst: Mittwoch 17. September 2008, 21:24
von Leonidas
Dann nimm eben den PixbufLoader, schadet ja auch nichts.