¿Cómo agregar un widget pygtk a la paleta Glade?

8

Digamos que he creado un widget GTK como este:

class AwesomeTextView (gtk.TextView):

    def set_font(self, font_description):
        self.modify_font(pango.FontDescription(font_description))

¿Cómo puedo agregar mi nuevo widget a la paleta en Glade Interface Builder?

ingrese la descripción de la imagen aquí

Stefano Palazzo
fuente

Respuestas:

7

Bien, esto va a ser paso a paso:

  • Nuestro widget se llamará AwesomeTextView, se llamará al módulo en el que se encuentra awesome_text_view. Estos son los únicos nombres que necesitamos.

Un widget glade consta de dos partes, el módulo y el catálogo.

  1. Creamos un catálogo, awesome_text_view.xmly (como root) lo guardamos en/usr/share/glade3/catalogs/

    Esto es lo que parece:

    <glade-catalog name="awesome_text_view"
        library="gladepython"
        domain="glade-3"
        depends="gtk+">
    
     <init-function>glade_python_init</init-function>
    
     <glade-widget-classes>
       <glade-widget-class title="Awesome TextView"
        name="AwesomeTextView"
        generic-name="awesome_text_view"/>
     </glade-widget-classes>
    
     <glade-widget-group name="python" title="Python">
       <glade-widget-class-ref name="AwesomeTextView"/>
     </glade-widget-group>
    </glade-catalog>
    

    Debe copiar y adaptar esta plantilla, ya que funciona . :-)

  2. Creamos un módulo, awesome_text_view.pyy (nuevamente como root) lo guardamos en/usr/lib/glade3/modules/

    Así es como se ve:

    import gobject
    import gtk
    import pango
    
    
    class AwesomeTextView (gtk.TextView):
    
        __gtype_name__ = 'AwesomeTextView'
    
        def __init__(self):
            gtk.TextView.__init__(self)
    
        def set_font(self, font_description):
            self.modify_font(pango.FontDescription(font_description))
    

    Ahora se muestra en Glade, y puede agregarlo a su aplicación.

  3. Finalmente, solo necesitarás

        export PYTHONPATH="$PYTHONPATH:/usr/lib/glade3/modules/"

¡Eso es!

Aquí hay una pequeña aplicación de prueba que muestra cómo usar su widget:

import gtk
import awesome_text_view

class App (object):

    builder = gtk.Builder()

    def __init__(self):
        self.builder.add_from_file("test.glade")
        self.builder.connect_signals(self)
        self.builder.get_object("awesome_text_view1").set_font("mono")
        gtk.main()

    def on_window1_destroy(self, widget):
        gtk.main_quit()


App()
Stefano Palazzo
fuente
Entonces, en la práctica, no hay forma de distribuir fácilmente el widget personalizado con su código y permitir que los contribuyentes lo agreguen a Glade sin que tengan que instalarlo manualmente en sus sistemas, entiendo. Glade es genial, una pena que no se puedan agregar widgets personalizados sin tener que entrar en las entrañas del sistema. En cualquier caso, buena respuesta!
David Planella
Esto no funciona para mí en 12.04. Glade imprime esto: (glade: 25053): GladeUI-WARNING **: Error al cargar la biblioteca externa 'gladepython'
usuario1477
1

Necesita hacer un catálogo para sus widgets, vea esta carpeta: /usr/share/glade3/catalogs/y verá gnome.xml, busque un ejemplo.

Consulte también la documentación de gnome:

http://developer.gnome.org/gladeui/stable/catalogintro.html

Martin Owens -doctormo-
fuente
No funciona :-( Parece que la documentación es simplemente incorrecta, actualizaré mi pregunta. Además, ¿quiso decir gtk+.xml, o simplemente me estoy perdiendo gnome.xmlpor alguna razón?
Stefano Palazzo
Debe crear su propio archivo xml, no modificar uno existente.
Martin Owens -doctormo-
Entendí eso, es solo que no tengo gnome.xml, y me pregunté si eso podría ser indicativo de un problema. Las instrucciones en el enlace que ha publicado son incorrectas en cualquier caso, todavía están trabajando en ello :-)
Stefano Palazzo