[Tkinter-discuss] Re: Hooking into custom Tcl/Tk Widgets from Tkinter (vis)

Jeff Epler jepler at unpythonic.net
Fri Apr 29 20:25:23 CEST 2005


On Fri, Apr 29, 2005 at 11:01:15AM -0600, David King wrote:
> But let's leave WCK aside and just talk about plain Tkinter for the moment. 
>  I'd like to understand how my custom C++/Tk widget could make itself known 
> in the usual Tkinter world.  On the C++ side, essentially all my Tcl/Tk API 
> calls interact with a tcl interpreter handle ('Tcl_Interp*').  Presumably I 
> need to get the one Tkinter uses, instead of creating an interpreter myself 
> (and also to let Tkinter handle the event loop, rather than doing _that_ 
> myself).  I'm wondering how I get this handle from Tkinter.

Here is some "C" code that I have used for this purpose.

// this code is in the public domain
static Tcl_Interp *get_interpreter(PyObject *tkapp) {
    long interpaddr;
    PyObject *interpaddrobj = PyObject_CallMethod(tkapp, "interpaddr", NULL);
    if(interpaddrobj == NULL) { return NULL; }
    interpaddr = PyInt_AsLong(interpaddrobj);
    Py_DECREF(interpaddrobj);
    if(interpaddr == -1) { return NULL; }
    return (Tcl_Interp*)interpaddr;
}

'PyObject *tkapp' is the thing returned by _tkinter.create(), and available as
the 'tk' attribute on all Tkinter widgets.

This is not foolproof, because passing in an object like
    class K:
        interpaddr = 0 
will soon lead to a crash.  But if you can trust the calling code to only pass in
"real" interpreters, it should work just fine.

Jeff
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
Url : http://mail.python.org/pipermail/tkinter-discuss/attachments/20050429/5df5a7ad/attachment.pgp


More information about the Tkinter-discuss mailing list