Custom Glade-3 Widgets in PYGTK

Recent versions of Glade 3 allow you to write custom widgets in PyGTK. This is great.

Catalog

<?xml version="1.0" encoding="UTF-8"?>
<glade-catalog name="pythontest" library="pythontest" domain="glade-3" depends="gtk+" language="python">
  <glade-widget-classes>
    <glade-widget-class title="TextView" name="TextView" generic-name="textview"/>
  </glade-widget-classes>
<glade-widget-group name="python" title="Python">
    <glade-widget-class-ref name="TextView"/>
</glade-widget-group>
</glade-catalog>

Adapter Code

import gtk
import gobject
import glade
 
class GladeTextViewAdaptor(glade.get_adaptor_for_type ('GtkHBox')):
        __gtype_name__ = 'GladeTextViewAdaptor'
        def __init__(self):
                glade.GladeGtkHBoxAdaptor.__init__(self)
        def do_post_create(self, obj, reason):
                print "hola\n";
        def do_child_set_property(self, container, child, property_name, value):
                glade.GladeGtkHBoxAdaptor.do_child_set_property(self,container, child, property_name, value);
                print "hola do_child_set_property\n";
        def do_child_get_property(self, container, child, property_name):
                a = glade.GladeGtkHBoxAdaptor.do_child_get_property(self,container, child, property_name);
                print "hola do_child_get_property\n";
                return a;
        def do_get_children(self, container):
                a = glade.GladeGtkHBoxAdaptor.do_get_children(self, container);
                print "hola do_get_children\n";
                return a;
 
class TextView(gtk.HBox):
        __gtype_name__ = 'TextView'
        def __init__(self):
                gtk.HBox.__init__(self)

Notes:

  • The adapter module should reside in $install_prefix/lib/glade3/modules/
  • The adapter code must be in PYTHONPATH
  • import glade in the adapter code is actually a glade module provided by glade ui core, only for the embedded interpreter.
  • if widgets need support code you have to define an adaptor class named Glade"yourcustomwidgetname"Adaptor