2017-08-28 145 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

非常感謝這個子進程解決方案,比我想象的更簡單。 –