Internet-Bild in einem GUI anzeigen

Programmierung für GNOME und GTK+, GUI-Erstellung mit Glade.
Benutzeravatar
MaXXLy
User
Beiträge: 24
Registriert: Sonntag 25. Mai 2008, 17:51

Internet-Bild in einem GUI anzeigen

Beitragvon MaXXLy » Dienstag 16. September 2008, 11:22

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
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Re: Internet-Bild in einem GUI anzeigen

Beitragvon Leonidas » Dienstag 16. September 2008, 11:36

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.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
MaXXLy
User
Beiträge: 24
Registriert: Sonntag 25. Mai 2008, 17:51

Danke für die Hilfe

Beitragvon MaXXLy » Dienstag 16. September 2008, 14:15

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?
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Dienstag 16. September 2008, 18:37

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.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
MaXXLy
User
Beiträge: 24
Registriert: Sonntag 25. Mai 2008, 17:51

Bitte zeig es mir!

Beitragvon MaXXLy » Mittwoch 17. September 2008, 20:21

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
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Mittwoch 17. September 2008, 21:24

Dann nimm eben den PixbufLoader, schadet ja auch nichts.
My god, it's full of CARs! | Leonidasvoice vs Modvoice

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder