Cuadros de diálogo transparentes con Python y Gtk+

Introducción

Hace ya algún tiempo que vengo haciendo uso de los diálogos transparentes en Python junto con Gtk+, con varias soluciones, como pueden ser los widgets en My-Weather-Indicator o bien la presentación de imágenes en Picapy.

Se trata de una técnica relativamente sencilla, pero que da resultados mas que interesantes como los comentados. Esto puede desarrollarse todavía mas si incluimos lo comentado en el artículo Picapy minimalista gracias a css sobre el uso de css en aplicaciones con Gtk+ y Python.

Cuadros de diálogos transparentes

Para realizar cuadros de diálogos transparentes, tenemos que crear una clase heredera de Gtk.Window, y en el init de la misma, definir los siguientes parámetros,

    self.set_decorated(False)
    self.set_app_paintable(True)
    screen = self.get_screen()
    visual = screen.get_rgba_visual()
    if visual and screen.is_composited():
        self.set_visual(visual)
    self.connect('draw', self.on_expose, None)  

El siguiente paso será modificar on_expose,

    def on_expose(self, widget, cr, data):
        cr.save()
        cr.set_operator(cairo.OPERATOR_CLEAR)
        cr.rectangle(0.0, 0.0, *widget.get_size())
        cr.fill()
        cr.restore()

En el caso de Picapy, lo que hice fue que la ventana ocupara toda la pantalla,

    self.fullscreen()

y para que la parte de atrás aparezca mas oscurecida, he añadido algo de código al método on_expose, al final del mismo, que lo que hace simplemente es dibujar un rectángulo con el color negro y el canal alfa al 80%

    cr.set_source_rgba(0.0,0.0,0.0,.8)
    cr.rectangle(0,0, *widget.get_size())
    cr.fill()

Conclusiones

Como ves se trata de algo realmente sencillo, pero que te da muchas posibilidades a la hora de crear tus propios interfaces personalizados. Esto te permite desde presentar una imagen con texto, o bien la típica ventana que aparece al inicio de una aplicación donde indica el nombre de la misma, versión, etc…, o otro tipo de acciones mas interesantes, como pueden ser animaciones, presentaciones, etc…

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *