从Python调用带函数指针作为参数的Tcl过程

6 投票
1 回答
1231 浏览
提问于 2025-04-16 04:25

可以从Python中调用带有函数指针(或者说回调函数)的Tcl过程吗?我正在使用Tkinter从Python调用Tcl过程。

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 个回答

7

是的,你的伪代码已经很接近了。你需要把你的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

撰写回答