hola a todos
esta es mi primera ves en una mailList y espero no meter la pata XD
hice una ventana transparente usando python gtk y cairo
le agregue unos botones pero se ven feos
así que agregue imágenes directamente en lugar de los botones. se ven bien ,
incluso las imagenes con canal alpha con las .png y los .gif animados funcionan
y parecen flotar en la ventana
pero las imagenes gtk.image() no tiene eventos "clicked" asi que las puse
dentro de una eventbox gtk.eventbox()
ahora puedo detectar los clicks pero la imagen termina en un rectángulo no
transparente
hay alguna forma de hacer el eventbox transparente?
o pintable?
o agregar eventos del mouse a las imágenes?
alguna idea???
información extra:
trabajo con ubuntu 10.04
python 2.7
gnome 2.3
para k lo vean mejor les dejo el codigo. usen una imagen pequeña, puede ser
animada o .png con partes transparentes o solidas
#!/usr/bin/env python
import sys
import gobject
import pango
sys.path[:0] = ['/usr/local/lib/python2.4/site-packages/gtk-2.0']
import pygtk
pygtk.require('2.0')
import gtk
from gtk import gdk
import cairo
if gtk.pygtk_version < (2,9,0):
print "PyGtk 2.9.0 or later required"
raise SystemExit
supports_alpha = False
def ejemplo(widget,event,data="....."):
print data
def expose(widget, event):
global supports_alpha
cr = widget.window.cairo_create()
if supports_alpha == True:
cr.set_source_rgba(0, 0, 0, 0.6) # Transparent
else:
cr.set_source_rgb(1.0, 1.0, 1.0) # Opaque white
# Draw the background
cr.set_operator(cairo.OPERATOR_SOURCE)
cr.paint()
cr.fill()
cr.stroke()
return False
def screen_changed(widget, old_screen=None):
global supports_alpha
# To check if the display supports alpha channels, get the colormap
screen = widget.get_screen()
colormap = screen.get_rgba_colormap()
if colormap == None:
print 'Your screen does not support alpha channels!'
colormap = screen.get_rgb_colormap()
supports_alpha = False
else:
print 'Your screen supports alpha channels!'
supports_alpha = True
# Now we have a colormap appropriate for the screen, use it
widget.set_colormap(colormap)
return False
def main(args):
win = gtk.Window()
win.set_title('Alpha Demo')
win.connect('delete-event', gtk.main_quit)
win.set_app_paintable(True)
win.connect('expose-event', expose)
win.connect('screen-changed', screen_changed)
win.set_decorated(True)
win.add_events(gdk.BUTTON_PRESS_MASK)
win.set_default_size(920,460)
#win.connect('button-press-event', clicked)
screen_changed(win)
hbox = gtk.HBox(False,0)
ima = gtk.Image()
ima.set_from_file("folder_orange_open.png")
bot = gtk.Button()
bot.connect("clicked",ejemplo,"folder_orange_open.png")
bot.add(ima)
hbox.pack_start(bot,False,False,20)
ima2 = gtk.Image()
ima2.set_from_file("folder_orange_open.png")
hbox.pack_start(ima2,False,False,20)
ima3 = gtk.Image()
ima3.set_from_file("folder_orange_open.png")
e = gtk.EventBox()
e.add(ima3)
e.connect("button_press_event",ejemplo,"eventbox")
hbox.pack_start(e,False,False,20)
vbox = gtk.VBox(False,0)
vbox.pack_start(hbox,False,True,50)
win.add(vbox)
win.show_all()
gtk.main()
return True
if __name__ == '__main__':
sys.exit(main(sys.argv))
_______________________________________________
Python-es mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/