[Python-es] Poner imagen de fondo en un contenedor
Iñigo Serna
inigoserna en gmail.com
Sab Ene 14 18:35:57 CET 2012
Buenas,
2012/1/14 Jose Sanchez <jose.sanchez86 en hotmail.es>:
> ¿Como se podría poner una imagen de fondo en un contenedor?
>
> Da igual el tipo que sea:
> gtk.EventBox(), gtk.HBox() o gtk.VBox.
> Con que en uno de ellos se pueda suficiente.
Para gtk+ v2.x tienes la respuesta en:
http://faq.pygtk.org/index.py?req=all#8.21
Copio el código:
##########################################################################
pixbuf = gtk.gdk.pixbuf_new_from_file("/path/to/img.png")
def expose(widget, event, pixbuf):
widget.window.draw_pixbuf(widget.style.bg_gc[gtk.STATE_NORMAL],
pixbuf, 0, 0, 0, 0)
if widget.get_child() is not None:
widget.propagate_expose(widget.get_child(), event)
return True
win = gtk.Window()
win.set_size_request(768, 32)
win.connect("delete-event", gtk.main_quit)
evbox = gtk.EventBox()
evbox.connect('expose_event', expose, pixbuf)
hbox = gtk.HBox(False, 10)
l1 = gtk.Label("tururu 1")
hbox.pack_start(l1, True, True, 0)
l2 = gtk.Label("tururu 2")
hbox.pack_start(l2, True, True, 0)
l3 = gtk.Label("tururu 3")
hbox.pack_start(l3, True, True, 0)
evbox.add(hbox)
win.add(evbox)
win.show_all()
gtk.main()
##########################################################################
La base de la solución pasa por conectar la señal "expose" (que se
encarga de redibujar los contenidos del widget) en la que pintas la
imagen.
Además, como las ni VBox ni HBox permiten conectar señales, lo
envuelves en un EventBox.
En gtk+ v3.x es similar procedimiento, pero el nombre de la señal ha cambiado.
Espero que te sea de ayuda.
Saludos,
Iñigo Serna
Más información sobre la lista de distribución Python-es