Como adicionar um widget pygtk à paleta Glade?

8

Digamos que criei um widget gtk como este:

class AwesomeTextView (gtk.TextView):

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

Como posso adicionar meu novo widget à paleta no Glade Interface Builder?

    
por Stefano Palazzo 15.03.2011 / 16:30

2 respostas

7

Ok, isso vai ser passo a passo:

  • Nosso widget será nomeado AwesomeTextView , o módulo em que ele será chamado awesome_text_view . Estes são os únicos nomes que precisamos.

Um widget glade consiste em duas partes, o módulo e o catálogo.

  1. Criamos um catálogo, awesome_text_view.xml e (como root) salvamos em /usr/share/glade3/catalogs/

    Isto é o 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>
    

    Você deve copiar e adaptar este modelo, pois ele funciona . : -)

  2. Criamos um módulo, awesome_text_view.py e (novamente como root), salve-o em /usr/lib/glade3/modules/

    Veja o que parece:

    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))
    

    Agora ele é exibido no Glade e você pode adicioná-lo ao seu aplicativo.

  3. Finalmente, você só precisa

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

É isso aí!

Aqui está um pequeno aplicativo de teste mostrando como usar seu 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()
    
por Stefano Palazzo 13.04.2011 / 17:58
1

Você precisa criar um catálogo para seus widgets, ver esta pasta: /usr/share/glade3/catalogs/ e você verá gnome.xml , procure um exemplo.

Veja também a documentação do gnome:

link

    
por Martin Owens -doctormo- 13.04.2011 / 14:21