从Python访问Tcl函数的示例

5 投票
4 回答
11409 浏览
提问于 2025-04-15 20:51

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 函数 的讨论。

撰写回答