Cargar GUI desde un Glade con GtkSourceView en PyGObject

Estoy tratando de usar un archivo Glade que tiene un widget GtkSourceView en PyGObject. He escrito una pequeña guía sobre cómo comenzar a usar el nuevo GtkSourceView 3.0 en Glade: http://cjenkins.wordpress.com/2012/05/08/use-gtksourceview-widget-in-glade/

El problema es cuando quiero cargar ese Glade desde PyGObject:

from gi.repository import Gtk, GtkSource from os.path import abspath, dirname, join WHERE_AM_I = abspath(dirname(__file__)) class MyApp(object): def __init__(self): self.builder = Gtk.Builder() self.glade_file = join(WHERE_AM_I, 'test.glade') self.builder.add_from_file(self.glade_file) if __name__ == '__main__': try: gui = MyApp() Gtk.main() except KeyboardInterrupt: pass 

Cuando ejecuto ese archivo recibí este error:

 Traceback (most recent call last): File "test.py", line 15, in  gui = MyApp() File "test.py", line 11, in __init__ self.builder.add_from_file(self.glade_file) File "/usr/lib/python2.7/dist-packages/gi/types.py", line 43, in function return info.invoke(*args, **kwargs) gi._glib.GError: Invalid object type `GtkSourceView' 

El archivo Glade (test.glade) es solo una ventana con un widget GtkSourceView en él:

      False   True True True 2 2 4 True False     

Una forma de resolver esto está fuera de mi conocimiento en este momento. Supongo que necesito registrar algún tipo antes de llamar a add_from_file (), ¿no? Cualquier idea es bienvenida.

Estoy usando:

  • Ubuntu Precise 12.04
  • Glade 3.12.0
  • libgtksourceview 3.0
  • Gtk + 3.0

Saludos cordiales

Me di cuenta: DI solo necesitaba registrar el nuevo tipo en GObject antes de llamar a add_from_file () como sospechaba. Solo se necesita agregar GObject en las importaciones de gi.repository y llamar a type_register () de esta manera:

 from gi.repository import Gtk, GtkSource, GObject from os.path import abspath, dirname, join WHERE_AM_I = abspath(dirname(__file__)) class MyApp(object): def __init__(self): self.builder = Gtk.Builder() self.glade_file = join(WHERE_AM_I, 'test.glade') GObject.type_register(GtkSource.View) self.builder.add_from_file(self.glade_file) if __name__ == '__main__': try: gui = MyApp() Gtk.main() except KeyboardInterrupt: pass 

Voy a actualizar la página con esta información.

Saludos cordiales