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
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

Responder a