On Wed, 2003-11-05 at 14:59, Tim Evans wrote:
> Tobbi wrote:
> >    Hi,
> > I'm actually developing an application standing at Gtk having two parts 
> > - Ansi C and Python.
> > The problem I met is how to get a C pointer of Gtk object relating to 
> > Python pyGtk object and vice versa.
> >  
> > Example:
> >  
> > Python:
> > button = gtk.Button()
> > C:
> > gtk_widget_destroy(button)
> >  
> > I've found some solution speaking about "_o" field of pyGtk object. 
> > However my object doesn't seem to have such pointer. Also, the 
> > descriptions speak about gtk.GtkButton instead of gtk.Button.
> >  
> > Is it version mismatch? I'm using pygtk-2.0 and python 2.2.x
> >  
> > So, is there a way to get pointer to wrapped pygtk object? Is there a 
> > way to create pygtk wrapper to already existing gtk object?
> 
> Others have already pointed out the difference between pygtk-0.6 and 
> 2.0, and that you are reading some outdate documentation.  The following 
> is how to do it for pygtk-2.0.  I'm assume that you already know how to 
> write a python extension in C.
> 
> - Make your foomodule.c look like this:
> 
>        #include <pygobject.h>
>        #include <pygtk.h>
>        /* global variable declared at top of file */
>        static PyTypeObject *PyGObject_Type=NULL;
>        /* ... */
>        void initfoo(void)
>        {
>            PyObject *module;
>            Py_InitModule("foo", foo_functions);
> 
>            init_pygobject();
>            init_pygtk();
>            module = PyImport_ImportModule("gobject");
>            if (module) {
>                PyGObject_Type =
>                 (PyTypeObject*)PyObject_GetAttrString(module, "GObject");
>                Py_DECREF(module);
>            }
>        }
> 
> - To create a python gtk widget from a C gtk widget:
>        pygobject_new((GObject*) widget);
>    If a python wrapper for 'widget' already exists, it will incref and
>    return that, other wise it will create a new python wrapper object.
> 
Do you possibly have a concrete example for this?  In particular, I have
a a custom gtk treeModel that I would like to wrap?


> - To get a pointer to the underlying C widget from a Python widget that
>    was passed as an argument, do something like this:
> 
>        PyGObject *py_widget;
>        GtkWidget *widget;
> 
>        if (!PyArg_ParseTuple(args, "O!", PyGObject_Type, &py_widget))
>            return NULL;
>        widget = GTK_WIDGET(py_widget->obj);
> 
> You might also want to look at the 'codegen' stuff that pygtk uses to 
> automatically generate most of the pygtk interface.  Once you get used 
> to using it, it's much easier to use than writing everything by hand.

Thanks
Dave Farning

_______________________________________________
pygtk mailing list   [EMAIL PROTECTED]
http://www.daa.com.au/mailman/listinfo/pygtk
Read the PyGTK FAQ: http://www.async.com.br/faq/pygtk/

Reply via email to