在导入tkinter'时更改Tcl的版本。在Python中

时间:2017-08-28 08:09:23

标签: python tcl

我使用import tkinter来执行Tcl脚本。

如:



import tkinter
runTCL = tkinter.Tk()
runTCL.tk.eval('puts [info tclversion]')




我的Tcl中安装的默认Python3.5 lib是Tcl8.6

我打算做的是访问IXIA并通过脚本自动配置它。

问题是我的IXIA(IxOS4.10)提供的 API 只能由Tcl8.4 lib访问,新版本是不可接受的。

我知道在类似Unix的系统中使用./configure --with-tcltk-libs等等可能很容易。

但是如果我Python3.5机器上Tcl8.4,我怎么能用import tkinter lib重新构建我的Windows-64bit

提前致谢。

1 个答案:

答案 0 :(得分:1)

最简单的方法可能是运行代码以subprocess的形式访问IXIA,这样它就可以使用Tcl 8.4而不会破坏Python使用的版本(这将产生很多其他后果)。现在不再支持所有的Tcl 8.4,但最新版本的Tcl是8.4.20,并且仅在几年前推出,因此它与当前的构建系统基本兼容。 (您可以从SourceForge获取8.4.20源代码。)

当您构建Tcl时,假设您的目标是Unix,您可以使用--prefix=选项来配置它将安装到configure;默认位置为/usr/local(例如,tclsh8.4二进制文件位于/usr/local/bin,支持库位于/usr/local/lib,文档位于/usr/local/man,...) 。如果您想在其他地方使用Tcl包,可以使用TCLLIBPATH环境变量来说明它们的位置。此外,如果您作为子进程运行,您可能希望调整标准输出上使用的缓冲级别:

# The default with terminals is line. The default with pipes is full.
fconfigure stdout -buffering line

通常,您可能会在Python代码中替换runTCL.tk.eval来打印代码以运行到子流程管道并读回结果。需要做一些工作才能使工作变得整洁,但是在这里已经讨论过其他问题。唯一的主要复杂因素是您正在使用不受支持的子进程代码版本。