Вызов процедур Tcl с указателями функций в качестве аргумента из Python

можно ли вызвать процедуры Tcl, которые имеют указатели на функции (или функции обратного вызова) из Python? Я использую Tkinter для вызова процедур Tcl из Python.

Фрагмент Python :

proc callbackFunc():
    print "I am in callbackFunc"

cb = callbackFunc
Tkinter.Tk.call('tclproc::RetrieveInfo', cb)

Фрагмент Tcl:

proc tclproc::RetrieveInfo() { callback } {
    eval $callback
}

примечание Я не могу изменить код Tcl как его внешнюю библиотеку для моего приложения.

//Hemanth

1 ответов


да, и ваш псевдокод довольно близко. Вы должны зарегистрировать свой код python с интерпретатором Tcl. Это создаст команду tcl, которая вызовет ваш код python. Затем вы ссылаетесь на эту новую команду tcl всякий раз, когда передаете ее процедуре Tcl, которая ожидает имя процедуры. Это звучит примерно так:

import Tkinter
root=Tkinter.Tk()

# create a python callback function
def callbackFunc():
    print "I am in callbackFunc"

# register the callback as a Tcl command. What gets returned
# must be used when calling the function from Tcl
cb = root.register(callbackFunc)

# call a tcl command ('eval', for demonstration purposes)
# that calls our python callback:
root.call('eval',cb)

крошечная часть документации здесь:

http://epydoc.sourceforge.net/stdlib/Tkinter.Misc-class.html#register