Como adicionar um widget pygtk à paleta Glade?

8

Digamos que eu criei um widget gtk assim:

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?

insira a descrição da imagem aqui

Stefano Palazzo
fonte

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.xmle (como root) o 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 funciona . :-)

  2. Criamos um módulo awesome_text_view.pye (novamente como root) o salvamos em/usr/lib/glade3/modules/

    Aqui está 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()
Stefano Palazzo
fonte
Portanto, na prática, não há como distribuir facilmente o widget personalizado com o seu código e permitir que os colaboradores o adicionem ao Glade sem que eles tenham que instalá-lo manualmente em seus sistemas, pelo que entendi. O Glade é ótimo, uma pena que os widgets personalizados não possam ser adicionados sem a necessidade de entrar no interior do sistema. Em qualquer caso, boa resposta!
David Planella 29/05
Isso não funciona para mim no 12.04. O Glade imprime isso: (glade: 25053): GladeUI-WARNING **: Falha ao carregar a biblioteca externa 'gladepython'
user1477
1

Você precisa criar um catálogo para seus widgets, consulte esta pasta: /usr/share/glade3/catalogs/e verá gnome.xml, dê uma olhada em um exemplo.

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

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

Martin Owens -doctormo-
fonte
Não funciona :-( Parece que a documentação é simplesmente errado, eu vou atualizar a minha pergunta também, que você quis dizer. gtk+.xml, Ou estou faltando apenas gnome.xmlpor algum motivo?
Stefano Palazzo
Você precisa criar seu próprio arquivo xml, não modificar um existente.
precisa saber é o seguinte
Entendi isso, é que não tenho o gnome.xml e me perguntei se isso poderia ser um indicativo de um problema. As instruções no link que você postou estão erradas em qualquer caso, ainda estão trabalhando nele :-)
Stefano Palazzo