从Python访问Tcl函数的示例
elmer 让我们可以从 Tcl 运行 Python 代码。那么反过来呢?有没有人能给我一个 Python 的例子?
更新:我指的是能够访问 Tcl 对象、调用 Tcl 函数等等,而不是仅仅运行一些 Tcl 代码。
4 个回答
1
虽然从理论上讲,可以通过提供一些自定义的Python对象类型来透明地包装C语言层面的Tcl_Obj*,但一般情况下,我们只是在字符串之间来回传递数据,因为Tcl的EIAS语义可以轻松地忽略其他内部表示。
所以,是的,你可以做得比字符串更好,但通常这样做不太划算。Tkinter已经内置了一些可能的优化,所以可以尝试利用这些现成的功能...
4
你可以看看Python的tkinter标准模块,它是一个与Tk用户界面相连接的工具,但它在后台会执行Tcl代码。
8
这是一个比较老的讨论,但我最近发现了 Tkinter.Tcl()
,它可以让你在 Python 中直接使用 Tcl 解释器,而不需要像 Tkinter.Tk()
那样启动一个 Tk 界面。
举个例子……假设你有一个 Tcl 文件(foo.tcl
),里面有一个叫 main
的过程,它需要一个文件名作为参数…… main
会返回一个字符串,这个字符串是从 foo.tcl
中读取的。
from Tkinter import Tcl
MYFILE = 'bar.txt'
tcl = Tcl()
# Execute proc main from foo.tcl with MYFILE as the arg
tcl.eval('source foo.tcl')
tcl_str = tcl.eval('main %s' % MYFILE)
# Access the contents of a Tcl variable, $tclVar from python
tcl.eval('set tclVar foobarme')
tclVar = tcl.eval('return $tclVar')
我还没有找到其他方法可以从 Python 访问 Tcl 对象,除了通过返回值,不过这确实提供了一种与 Tcl 过程交互的方式。此外,你还可以将 Python 函数导出到 Tcl 中,具体可以参考 在 Tkinter.Tcl() 中使用 Python 函数 的讨论。