在Python中“import tkinter”时更改Tcl的版本

2024-06-11 17:22:13 发布

您现在位置:Python中文网/ 问答频道 /正文

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

例如:

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

我的Python3.5中安装的默认Tcllib是Tcl8.6。在

我的目的是访问IXIA并通过脚本自动配置它。在

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

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

但是当我在我的机器上使用import tkinter时,如何用Tcl8.4库重新构建我的Python3.5?在

提前谢谢。在


Tags: import目的info脚本apitkinterevaltcl
1条回答
网友
1楼 · 发布于 2024-06-11 17:22:13

最简单的方法可能是以subprocess的形式运行代码来访问IXIA,这样它就可以使用tcl8.4,而不会中断Python使用的版本(这会产生很多其他后果)。现在tcl8.4不再支持,但Tcl的最新版本是8.4.20,而且是几年前才推出的,因此它在很大程度上与当前的构建系统兼容。(您可以从SourceForge获取8.4.20源代码。)

在构建Tcl时,假设您的目标是Unix,那么可以使用 prefix=选项来配置它的安装位置configure;默认位置是/usr/local(例如,tclsh8.4二进制文件在/usr/local/bin中,/usr/local/lib,文档放在{},…)。如果您想在其他地方使用Tcl包,可以使用TCLLIBPATH环境变量来表示它们的位置。另外,如果作为子进程运行,则可能需要调整标准输出上使用的缓冲级别:

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

通常,您可能会在Python代码中用runTCL.tk.eval来打印要运行到子进程管道的代码并读回结果。我们需要做一些工作来使它整齐地工作,但这类事情已经在其他问题中讨论过了。唯一的主要问题是,您正在为子流程使用不受支持的代码版本。在

相关问题 更多 >