1

我在 Anaconda 中安装了 8.6.10 的 tk 包。我运行 Python 3.8.5 当我在 Spyder IDE 中运行简单脚本时

import tkinter as tk
win = tk.Tk()

我收到经典消息“TclError:在以下目录中找不到可用的 init.tcl:”在报告的目录列表中,我确实有 tcl。我尝试在 anaconda 的 cmd 中运行 tclsh 并希望它们都在工作。通过运行 wish 并寻找它正确报告的版本 Tcl 和 Tk 8.6.10

所以我把 C:\ProgramData\Anaconda3\Library\lib\tcl8.6\init.tcl 移到 C:/ProgramData/library 中,因为这是我在错误报告中得到的目录之一。当我这样做时,我得到另一个错误“C:/ProgramData/library/init.tcl:包“Tcl”的版本冲突:有8.6.9,需要8.6.10”

所以很明显 bin 中的 tclsh 和 init.tcl 不是来自同一个版本(为什么?)但是现在如何强制执行我的 python 脚本的正确行为以寻找正确的 Tcl/Tk?我期待这能开箱即用

ps 目录“C:\ProgramData\Anaconda3\Library\lib\tcl8.6”也在错误返回的目录列表中。

4

1 回答 1

0

问题是正在使用的 DLL 的版本(可能是TCL86.DLLTK86.DLL在 Windows 上,但确切的名称可能会有所不同)必须与其支持文件的版本完全匹配(主要是init.tcl,但除此之外还有很多) . 这是一个硬性要求。软件会检查它(正确!),如果没有它们,绝对不会工作。由于二进制代码正在查找来自 8.6.9 的文件,但具有来自 8.6.10 的文件(版本不匹配),因此它将无法工作。(我不确切知道 Tkinter 是如何构建的。)

但至少我们知道它在寻找什么文件,以及从哪里得到它们。Tcl 和 Tk 8.6.9 的正式版本位于https://sourceforge.net/projects/tcl/files/Tcl/8.6.9/所以从那里获取tcl869-src.zip 从那里获取,并将每个 ZIP 中目录tk869-src.zip的内容复制到library您希望它们成为(可能是搜索的目录之一)。您不需要做任何比这更花哨的事情,除了可能删除旧的不匹配文件(如果它们在路径上较早)。

于 2020-12-11T09:34:19.217 回答