无法运行IDLE:没有名为'_tkinter'的模块。

问题描述 投票:-3回答:1

当我运行 "idle3.8 "时,我得到了这个错误。

 IDLE can't import Tkinter.
   Your Python may not be configured for Tk.

我已经安装了所有的tkinter包,但我又得到了这个错误。 当我导入tkinter时,我得到了这个错误。

File "/usr/local/lib/python3.8/tkinter/__init__.py", line 36, in <module>
    import _tkinter # If this fails your Python may not be configured for Tk
ModuleNotFoundError: No module named '_tkinter'

但我可以在python 2上导入tkinter。

  • 我的操作系统是Fedora

  • 我的python版本是:3.8.2。

python linux tkinter pip fedora
1个回答
0
投票

这里是 步步为营 使IDLE和 tkinter 在MacOS Catalina上工作。应该很容易适应Linux。

  1. 安装 tcl-tk 与Homebrew。在shell中运行 brew install tcl-tk
  2. 借壳 echo 'export PATH="/usr/local/opt/tcl-tk/bin:$PATH"' >> ~/.zshrc
  3. 重装外壳 Terminal 应用或运行 source ~/.zshrc
  4. 重装后检查 tck-tk 是在 $PATH. 运转 echo $PATH | grep --color=auto tcl-tk. 结果,你应该看到你的$PATH内容与 tcl-tk 突出
  5. 现在我们从步骤#1的Homebrew输出中运行三个命令。
    1. 借壳 export LDFLAGS="-L/usr/local/opt/tcl-tk/lib"
    2. 借壳 export CPPFLAGS="-I/usr/local/opt/tcl-tk/include"
    3. 借壳 export PKG_CONFIG_PATH="/usr/local/opt/tcl-tk/lib/pkgconfig"
  6. 如果您的Python版本已经安装了 pyenv 然后用 pyenv uninstall <your python version>. 例如 pyenv uninstall 3.8.2
  7. 设置环境变量,该变量将被 python-build. 在shell中运行 PYTHON_CONFIGURE_OPTS="--with-tcltk-includes='-I/usr/local/opt/tcl-tk/include' --with-tcltk-libs='-L/usr/local/opt/tcl-tk/lib -ltcl8.6 -ltk8.6'"注:在今后的使用中 tck-tk 的版本,实际安装了Homebrew。在发帖的那一刻 8.6 是实际的
  8. 最后安装Python,用 pyenvpyenv install <version>. 例如: pyenv install 3.8.2

测试

  1. 借壳 pyenv global <verion that you've just installed>
  2. 现在检查IDLE。在shell中运行 idle. 你应该看到IDLE窗口,没有任何警告和 "文本打印为红色"。

IDLE window run from Terminal. No warnings

  1. 现在检查 tkinter. 在shell中运行 python -m tkinter -c "tkinter._test()". 你应该看到像图上一样的测试窗口。

tkinter test window

就是这样!

我的环境。

检查一下,这是什么地方出了问题 执行上面的步骤。

  1. macOS Catalina
  2. zsh (包含在MacOS Catalina中) = "贝壳 "以上
  3. Homebrew(根据Homebrew官网的说明安装)
  4. pyenv (安装时使用Homebrew,PATH按照以下标准更新) pyenv 官方readme from GitHub)
  5. 蟒蛇 3.8.x - 3.9.x (安装有 pyenv install <version> 命令)
© www.soinside.com 2019 - 2024. All rights reserved.