这是我在 StackOverflow 上发表的第一篇文章,我会尽力使其尽可能正确和完整,如果您有任何改进我的文章的建议,我会很乐意接受。
我在运行使用 Tkinter 的 Python 编写的代码时遇到问题。
我会尽量详细描述我的操作,以便于识别错误。
我在 Coursera 开设了一门关于 DSP(数字信号处理)的课程,建议安装一个用 python(和一点点 C)编写的工具。我正在使用 Arch Linux。
Github 上的链接: sms-tools repo
使用 pyenv/virtualenv/virtualenvwrapper ,我使用 Python 3.7.5 创建了一个环境,正如存储库“如何使用”部分中所推荐的那样。
我通过 pip 在我的环境中安装了所需的库:
%pip install ipython numpy matplotlib scipy cython
我在 “/sms-tools/software/models/utilFunctions_C” 中编译了一些 C 函数
使用以下命令的目录:
%python compileModule.py build_ext --inplace
最后,我在目录 “/sms-tools/software/models_interface” 中运行模型 GUI
%python models_GUI.py
我收到以下消息:
Traceback (most recent call last):
File "models_GUI.py", line 6, in <module>
from Tkinter import * ## notice capitalized T in Tkinter
ModuleNotFoundError: No module named 'Tkinter'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "models_GUI.py", line 9, in <module>
from tkinter import * ## notice lowercase 't' in tkinter here
File "~/.pyenv/versions/3.7.5/lib/python3.7/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 Wiki 中的 Tkinter 部分, 我尝试安装 Tcl 和 Tk。
%sudo pacman -S tk
但它已经安装了。之后我尝试使用 pip 安装:
%pip install tk
和
%pip install tkinter
并且错误保持不变。
我还尝试使用此代码创建符号链接: %ln -s /usr/lib/python3.8/lib-dynload/_tkinter.cpython-38-x86_64-linux-gnu.so _tkinter.cpython-38-x86_64-linux-gnu.so
符号链接是在以下文件夹中创建的:
~/.ve/Coursera_DSP/lib/python3.7/lib-dynload
和
.pyenv/versions/3.7.5/lib/python3.7/lib-dynload
但我仍然遇到同样的错误。
如果有人有任何建议,我将不胜感激,对于语言错误,我深表歉意,因为英语不是我的母语。
在网上不断搜索后,我认为问题与pyenv和TCL/TK有关。我不太了解这个主题,但我怀疑在 virtualenv python 创建环境时已经失去了与 TCL/TK 的联系。这有任何意义吗?
原文由 Túlio Chiodi 发布,翻译遵循 CC BY-SA 4.0 许可协议
这是使 IDLE 和
tkinter
工作 的分步指南。在 macOS Catalina 上为我工作。应该很容易适应Linux环境:tcl-tk
。在 shell 中运行brew install tcl-tk
echo 'export PATH="/usr/local/opt/tcl-tk/bin:$PATH"' >> ~/.zshrc
Terminal
应用程序或运行source ~/.zshrc
tck-tk
在$PATH
中。运行echo $PATH | grep --color=auto tcl-tk
。结果你应该看到你的 $PATH 内容tcl-tk
突出显示export LDFLAGS="-L/usr/local/opt/tcl-tk/lib"
export CPPFLAGS="-I/usr/local/opt/tcl-tk/include"
export PKG_CONFIG_PATH="/usr/local/opt/tcl-tk/lib/pkgconfig"
pyenv
然后用pyenv uninstall <your python version>
卸载它。例如pyenv uninstall 3.8.2
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
是实际的pyenv
和pyenv install <version>
安装 Python。例如pyenv install 3.8.2
测试
pyenv global <verion that you've just installed>
idle
。您应该看到没有任何警告的 IDLE 窗口和“以红色打印的文本”。tkinter
。在 shell 中运行python -m tkinter -c "tkinter._test()"
。您应该会看到如图所示的测试窗口:而已!
我的环境:
检查这是不是执行上面的步骤出了问题:
zsh
(包含在macOS Catalina中)= 上面的“shell”pyenv
(根据pyenv
GitHub 的官方自述文件更新了 Homebrew 和 PATH)3.8.x
-3.9.x
(安装pyenv install <version>
命令)