Python Gtk widgets support

Add python support to your catalog — How to write and install a catalog for a python widget library

Introduction

Glade supports loading widgets coded in python by linking and running the python interpreter from the gladepython catalog plugin.

So in order for glade to include your python gtk widgets you will have to:

a) specify gladepython support code as your plugin library.
b) set glade_python_init as you init function.
c) make sure your catalog name is the same as your python import library since glade_python_init() will use this name to import your widgets into the interpreter.
pythonplugin.xml


<glade-catalog name="pythonplugin" library="gladepython"
domain="glade-3" depends="gtk+">
 <init-function>glade_python_init</init-function>

 <glade-widget-classes>
   <glade-widget-class title="MyPythonBox" name="MyPythonBox" generic-name="mypythonbox"/>
 </glade-widget-classes>

 <glade-widget-group name="python" title="Python">
   <glade-widget-class-ref name="MyPythonBox"/>
 </glade-widget-group>
</glade-catalog>
     

Glade's python interpreter will look up for your widgets in the same places it looks for regular catalogs plugins, that is $GLADE_ENV_MODULE_PATH environment variable and `pkg-config --variable=moduledir gladeui-2.0` So the easiest thing would be to make a symlink in one of those directory, just do not forget that the name should be the one specified in your catalog name.

pythonplugin.py


from gi.repository import GLib, Gtk, GObject

class MyPythonBox(Gtk.Box):
  __gtype_name__ = 'MyPythonBox'

  foo = GObject.Property(type=int, nick='An integer')
  bar = GObject.Property(type=str, nick='A String')

  def _update(self, obj, pspec):
    self.label.set_text ('Python Properties\nInteger = ' + str(self.foo) + '\nString = \'' + self.bar + '\'')

  def __init__ (self):
    Gtk.Box.__init__ (self)
    self.label = Gtk.Label (visible = True)
    self.add (self.label)
    self.connect('notify::foo', self._update)
    self.connect('notify::bar', self._update)
    self._update(None, None)