【问题标题】:Python Tkinter throwing Tcl errorPython Tkinter 抛出 Tcl 错误
【发布时间】:2015-06-01 22:10:07
【问题描述】:

我正在学习 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

任何指向我在这里缺少的东西的指针都会有很大的帮助。

【问题讨论】:

  • 你确定你idle中使用的python版本和命令行中使用的是同一个版本吗?
  • @BryanOakley 是的,我正在使用相同的版本。这是相同 IDLE 的 sn-p:Python 2.7 (r27:82525, Jul 4 2010, 07:43:08) [MSC v.1500 64 bit (AMD64)] on win32 Python CmdLine: Python 2.7 (r27:82525 , Jul 4 2010, 07:43:08) [MSC v.1500 64 bit (AMD64)] on win32

标签: python-2.7 tkinter tk


【解决方案1】:

转到存储所有 python 依赖项的目录

例子:

Python37 
  -DLLs
  -Doc
  -etc
  -include
  -Lib
  -libs
  -Scripts
  -tcl
  -python.exe

进入tcl文件夹,复制tcl8.5和tk8.5文件夹 将这些文件夹粘贴到 Lib 文件夹中

此解决方案适用于 Windows 10 用户

【讨论】:

    【解决方案2】:

    您需要做的就是将tcl 8.6tcl 8.5tcl 文件复制到Lib 文件中的pythonPython-tcl-tcl8.5Python-Lib

    【讨论】:

      【解决方案3】:

      如果您在 python -m venv NAME 类型的虚拟环境中遇到此类错误(并且您实际上在系统中安装了 tcl),那么您需要导出路径,类似于 Kamil Czerski 在之前的 suggested为 virtualenv 发帖。

      1. 要找出您的 TK 和 TCL 路径是什么,请在 venv (source) 的外部运行 python 脚本:
      import tkinter
      root = tkinter.Tk()   
      print(root.tk.exprstring('$tcl_library'))   
      print(root.tk.exprstring('$tk_library'))
      
      1. 打开您的 venv 配置文件 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
      
      1. 停用(如果已激活)并再次获取您的 venv:
      deactivate  
      source bin/activate
      

      “Tcl 缺失”错误应该消失了。

      【讨论】:

        【解决方案4】:

        我在 Ubuntu 17.04 上使用 64 位 Python 2.7 的 virtualenvwrapper 遇到了同样的问题

        我在本地postactivate script添加tk和tcl库路径

        1. 转到您的虚拟环境:workon your-env-name
        2. 使用您喜欢的编辑器编辑本地 postactiave 脚本,例如: gedit $VIRTUAL_ENV/bin/postactivate
        3. 找到 tk 和 tcl 库路径。在 postactivate 脚本中,使用适当的路径导出 TK_LIBRARY 和 TCL_LIBRARY。使用修改后的路径将此行添加到您的脚本中:

          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

        4. 重新启动您的 virtualenv:deactivateworkon your-env-name 再次。

        【讨论】:

          【解决方案5】:

          你只需要将tcl文件夹中的两个文件夹复制到Lib文件夹中

          tcl8.5 和 tk8.5

          【讨论】:

          • 这解决了我的问题。 Windows 10,在 PowerShell、Python 3.6.3、tcl8.6、tk8.6 中运行 Python。尝试运行 matplotlib 时出错。复制文件夹后它可以工作。非常感谢!
          • 我也通过将 tcl8.6 和 tk8.6 复制到 Python 3.8 上的 Lib 文件夹中解决了这个问题
          【解决方案6】:

          安装 Activestate Python 和 TCL 后遇到类似问题。我发现以下页面为我解决了这个问题:ActiveState Python install problem。解决方法是将C:\Python27\tcl 的内容复制到C:\Python27\Lib

          另一个可能的解决方案(由用户 i-shenl 在不同的ActiveState thread 中针对同一问题提供)是将environment variable $TCL_LIBRARY 设置为指向 tcl 库文件夹(“C:/Python27/tcl” ,在问题中)。如果您设置此系统范围或帐户范围(通过System Properties),它将影响使用 TCL 库的其他程序(如果已安装)。如果您使用的是 Powershell,则可以在 profile 中设置此变量,以限制其对从 shell 运行的程序的影响。

          【讨论】:

          • 复制该文件夹的内容对我有用。 tcl 子文件夹中的所有文件/文件夹都以 tk 或 tcl 开头,而目标 lib 子文件夹中没有 - 我在复制之前检查了这一点,以防我想再次退出!
          【解决方案7】:

          IDLE 可能正在设置 TCL 所需的路径。要找出 IDLE 正在使用什么路径,请比较 IDLE 和没有 IDLE 的 sys.path 的输出。然后,您可以使用环境变量或以编程方式添加 init.tcl 的位置。请参阅 Xenomorph 建议。

          【讨论】:

            【解决方案8】:

            如果您在 Windows 上使用 Virtualenv,我在这里找到了解决方案:https://github.com/pypa/virtualenv/issues/93

            我将“tcl”文件夹从 C:\Python27\ 复制到新 Virtualenv 的根目录下,Tkinter.Tk() 显示一个新窗口而不会引发异常。

            我在 Windows 7 上运行 Python 2.7。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2021-05-08
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-09-14
              相关资源
              最近更新 更多