OK, I finally found the answer ! I spent many hours so I think this
example can help someone else.
It'd be great if there was such documentation on pygtk.org.
Code example :
Python module (button.py) :
---------------
import gtk
def newButton(label=""):
b = gtk.Button(label)
b.connect("clicked", lambda w: gtk.main_quit())
return b
---------------
C source (embed-pygtk) :
---------------
/*
gcc embed-pygtk.c -o embed-pygtk -I/usr/include/python2.3
-I/usr/include/pygtk-2.0/ -L/usr/lib/python2.3/config/ -lpython2.3
-lpthread -lutil `pkg-config --libs --cflags glib-2.0 gthread-2.0
gtk+-2.0 pygtk-2.0`
*/
#include <Python.h>
#include <gtk/gtk.h>
#include <pygobject.h>
#include <pygtk/pygtk.h>
int main(int argc, char **argv)
{
GtkWidget *w;
GtkWidget *b;
PyObject *pName, *pModule, *pDict, *pFunc;
PyObject *pArgs;
PyObject *pValue;
gtk_init(&argc, &argv);
Py_Initialize();
init_pygtk();
w = gtk_window_new(GTK_WINDOW_TOPLEVEL);
g_signal_connect(w,
"destroy",
G_CALLBACK(gtk_main_quit),
NULL);
pName = PyString_FromString("button");
pModule = PyImport_Import(pName);
Py_DECREF(pName);
if (pModule == NULL)
g_error("Bad !");
pDict = PyModule_GetDict(pModule);
pFunc = PyDict_GetItemString(pDict, "newButton");
if (pFunc && PyCallable_Check(pFunc)) {
/* Tuple in argument */
pArgs = PyTuple_New(1);
pValue = PyString_FromString("Hello, World !");
PyTuple_SetItem(pArgs, 0, pValue);
pValue = PyObject_CallObject(pFunc, pArgs);
Py_DECREF(pArgs);
b = g_object_ref(pygobject_get(pValue));
} else {
g_error("Bad 2 !");
}
gtk_container_add(GTK_CONTAINER(w), b);
gtk_widget_show_all(w);
gtk_main();
Py_Finalize();
return 0;
}
Bye
Stephane
_______________________________________________
pygtk mailing list [email protected]
http://www.daa.com.au/mailman/listinfo/pygtk
Read the PyGTK FAQ: http://www.async.com.br/faq/pygtk/