Come aggiungere un widget pygtk alla palette Glade?


8

Supponiamo di aver creato un widget GTK in questo modo:

class AwesomeTextView (gtk.TextView):

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

Come posso aggiungere il mio nuovo widget alla palette in Glade Interface Builder?

inserisci qui la descrizione dell'immagine

Risposte:


7

Bene, questo sarà passo dopo passo:

  • Il nostro widget verrà chiamato AwesomeTextView, verrà chiamato il modulo in cui si trova awesome_text_view. Questi sono gli unici nomi di cui abbiamo bisogno.

Un widget glade è composto da due parti, il modulo e il catalogo.

  1. Creiamo un catalogo awesome_text_view.xmle (come root) lo salviamo in/usr/share/glade3/catalogs/

    Ecco come appare:

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

    Dovresti copiare e adattare questo modello, mentre funziona . :-)

  2. Creiamo un modulo awesome_text_view.pye (di nuovo come root) lo salviamo in/usr/lib/glade3/modules/

    Ecco come appare:

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

    Ora è visualizzato in Glade e puoi aggiungerlo alla tua applicazione.

  3. Infine, dovrai solo farlo

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

Questo è tutto!

Ecco una piccola app di prova che mostra come utilizzare il tuo 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()

Quindi, in pratica, non c'è modo di distribuire facilmente il widget personalizzato con il tuo codice e lasciare che i collaboratori lo aggiungano a Glade senza che debbano installarlo manualmente sui loro sistemi, ho capito. Glade è eccezionale, un peccato che i widget personalizzati non possano essere aggiunti senza dover entrare nel fegato del sistema. In ogni caso, bella risposta!
David Planella,

Questo non funziona per me in 12.04. Glade stampa questo: (glade: 25053): GladeUI-WARNING **: Impossibile caricare la libreria esterna 'gladepython'
user1477

1

Devi creare un catalogo per i tuoi widget, vedere questa cartella: /usr/share/glade3/catalogs/e vedrai gnome.xml, dai un'occhiata ad un esempio.

Vedi anche la documentazione di gnome:

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


Non funziona :-( Sembra che la documentazione sia semplicemente sbagliata, aggiornerò la mia domanda. Inoltre, volevi dire gtk+.xml, o mi manca solo gnome.xmlper qualche motivo?
Stefano Palazzo

Devi creare il tuo file XML, non modificarne uno esistente.
Martin Owens -doctormo-

L'ho capito, è solo che non ho gnome.xml e mi chiedevo se potesse essere indicativo di un problema. Le istruzioni nel link che hai pubblicato sono sbagliate in ogni caso, ancora lavorando su di esso :-)
Stefano Palazzo
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.