2017-08-28 143 views
0

我使用import tkinter来执行Tcl脚本。在Python中'import tkinter'时更改Tcl的版本

如:

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

默认安装在我的Python3.5Tcl LIB是Tcl8.6

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

问题是的API提供了通过我的IXIA(与IxOS4.10)只能通过Tcl8.4 LIB访问,更新的版本是不可接受的。

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

但是我怎么能重新构建我的Python3.5Tcl8.4 lib当我import tkinter在我的Windows-64bit机?

在此先感谢。

+0

请阅读python.org/download/mac/tcltk。你会在那里发现,如果不重新编译和重新链接Python中的_tkinter模块,你将无法更改Tk版本 –

+0

@MohhamadHasham是的,这就是我所要求的。我需要重新编译和重新编译我的Python。但我不知道该怎么做。 –

+0

问题是,你不能像写在文档中那样。你必须以其他方式思考。 :-) –

回答

1

最简单的方法是运行代码以访问IXIA,作为subprocess,这样它就可以在不中断Python使用的版本的情况下使用Tcl 8.4(这会产生很多其他后果)。现在Tcl 8.4不再支持,所有的,但最新版本的Tcl是8.4.20,并且在几年前才推出,因此它与当前的构建系统基本兼容。 (你可以从SourceForge获得20年8月4日的源代码)

当你正在构建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到子进程管道并读取结果。为了使这项工作整洁,需要一点工作,但这类问题已在其他问题中讨论过。唯一的主要问题是您正在处理子流程的代码版本不受支持。

+0

非常感谢这个子进程解决方案,比我想象的更简单。 –