Skip Montanaro wrote:

>    James>     class _HEntry(gtk.Entry):
>    James>         def __init__(self):
>    James>             gobject.GObject.__init__(self)
>    James>             self.set_name("_history_")
>    James>     gobject.type_register(_HEntry)
>
>    James> Note the gobject.type_register() call, and chaining to
>    James> GObject.__init__ rather than gtk.Entry.__init__.  If you look at
>    James> _HEntry.__gtype__, it should be for This way, the signals will be
>    James> added to your new type rather than GtkEntry.  This will also
>    James> change the type name used in the gtkrc file.  The type name is
>    James> generated from the full class name (module.class), with dots
>    James> replaced with plus signs (because Tim doesn't want to make dots
>    James> valid in type names).
>
>Thanks, I never would have guessed that.  How come there is no need to chain
>through gtk.Entry.__init__?
>
Initialisation of GObjects is already a two part process.  Each new type 
declares an instance init function.  C calls like gtk_entry_new() first 
call a gobject funciton to create the instance object, which calls the 
instance init functions for the superclasses in order (GObject down to 
GtkEntry in this case).

Sometimes the function like gtk_entry_new() may do some extra 
initialisation after creating the instance (in the case of GtkEntry, it 
doesn't).  The GObject.__init__ constructor (and 
GObject.__gobject_init__ which is a synonym which doesn't get overriden 
by subclasses) just calls the g_object_new() function with the GType of 
the class (it uses the __gtype__ attribute to find this).

James.

-- 
Email: [EMAIL PROTECTED]
WWW:   http://www.daa.com.au/~james/




_______________________________________________
pygtk mailing list   [EMAIL PROTECTED]
http://www.daa.com.au/mailman/listinfo/pygtk

Reply via email to