我正在学习 Python 中的基本 GUI,并且我在 Stack Overflow 上遇到了一个从文件资源管理器读取文件名的示例示例。
from Tkinter import Tk
from tkFileDialog import askopenfilename
Tk().withdraw() # we don't want a full GUI, so keep the root window from appearing
filename = askopenfilename() # show an "Open" dialog box and return the path to the selected file
print(filename)
当我尝试在 IDLE 中运行该特定脚本时,它工作正常,但如果我在 Windows 7 中从命令提示符尝试运行,则该脚本无法运行。
Python 版本:2.7。
这是我得到的输出错误:
>>> from Tkinter import Tk
>>> from tkFileDialog import askopenfilename
>>> Tk().withdraw()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\Lib\lib-tk\Tkinter.py", line 1685, in __init__
self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
_tkinter.TclError: Can't find a usable init.tcl in the following directories:
C:/Python27/lib/tcl8.5 D:/PyProj/lib/tcl8.5 D:/lib/tcl8.5 D:/PyProj/library D:/library D:/tcl8.5.2/library D:/tcl8.5.2/library
This probably means that Tcl wasn't installed properly
我在这里缺少什么?
您只需将 tcl 文件夹中的两个文件夹复制到 Lib 文件夹即可
tcl8.5 和 tk8.5
如果您在 Windows 上使用虚拟环境,我已经找到了解决方案这里。
简而言之:
从 Python 根目录复制
文件夹,例如tcl/
,到虚拟环境的根目录,例如C:/Python27/
。.venv/
然后
Tkinter.Tk()
显示一个新窗口而不抛出异常。
这是在 Windows 7 上使用 Python 2.7 进行的,但在 2024 年仍然有效。 例如,升级到 Python 3.13 后我遇到了同样的错误。 我所要做的就是修复错误:
cp -r C:/Users/Wok/AppData/Local/Programs/Python/Python313/tcl .venv/
ActiveState Python install Problem。修复方法是将 C:\Python27\tcl
的内容复制到
C:\Python27\Lib
。另一个潜在的解决方案(由用户 i-shenl 在同一问题的不同
ActiveState 线程中给出)是设置 环境变量 $TCL_LIBRARY
我在本地
workon your-env-name
gedit $VIRTUAL_ENV/bin/postactivate
TK_LIBRARY=/home/kamil/anaconda2/pkgs/tk-8.5
TKPATH=/home/kamil/anaconda2/pkgs/tk-8.5
TCL_LIBRARY=/home/kamil/anaconda2/lib/tcl8.5
export TCL_LIBRARY TK_LIBRARY TKPATH
deactivate
和
workon your-env-name
。
python -m venv NAME
类型的虚拟环境中遇到此类错误(并且您的系统中实际上安装了 tcl),那么您需要按照 Kamil Czerski 在上一篇文章中的建议 导出路径虚拟环境。
import tkinter
root = tkinter.Tk()
print(root.tk.exprstring('$tcl_library'))
print(root.tk.exprstring('$tk_library'))
bin/activate
并找到它们
export PATH
的位置并在此之后插入(插入步骤 1 中的正确路径):
TCL_LIBRARY="/tcl/path/from/step/1"
TK_LIBRARY="/tk/path/from/step/1"
TKPATH="/tk/path/from/step/1"
export TCL_LIBRARY TK_LIBRARY TKPATH
deactivate
source bin/activate
“Tcl 缺失”错误应该消失了。
示例:
Python37
-DLLs
-Doc
-etc
-include
-Lib
-libs
-Scripts
-tcl
-python.exe
进入tcl文件夹,复制tcl8.5和tk8.5文件夹
将这些文件夹粘贴到 Lib 文件夹中此解决方案适用于 Windows 10 用户
tcl 8.6
和
tcl 8.5
从
tcl
文件复制到
Lib
中的
python
文件。
Python-tcl-tcl8.5
至
Python-Lib
init.tcl
文件。但该文件可能位于计算机上的其他软件中!如果是这样,请将包含的文件夹复制到预期位置以进行快速修复。您只需复制两个文件夹即可。
tcl8.5
从
Python/tcl/TCL8.5
文件夹 - 到
Python/Lib/TCL8.5
文件夹。对
tk8.5
执行相同操作,但使用
Python/TK/tk8.5
文件夹 - 到
Python/Lib/TKL8.5
文件夹。您的本地路径可能与上面的有点不同。但这是一般想法。