If I do this on MacOS Mojave in Homebrew:
$ brew install tcl-tk
$ brew install pyenv
$ pyenv install 3.7.4
$ pyenv global 3.7.4
$ python -m tkinter -c 'tkinter._test()'
I get:
Traceback (most recent call last):
File "/Users/craign/.pyenv/versions/3.7.4/lib/python3.7/runpy.py", line 183, in _run_module_as_main
mod_name, mod_spec, code = _get_module_details(mod_name, _Error)
File "/Users/craign/.pyenv/versions/3.7.4/lib/python3.7/runpy.py", line 142, in _get_module_details
return _get_module_details(pkg_main_name, error)
File "/Users/craign/.pyenv/versions/3.7.4/lib/python3.7/runpy.py", line 109, in _get_module_details
__import__(pkg_name)
File "/Users/craign/.pyenv/versions/3.7.4/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'
I've been searching for days, and have tried various solutions such as here but without luck so far. Any ideas why I'm getting this error and how to fix it?
Thanks in advance!
Here is step by step guide to make IDLE and tkinter
work:
tcl-tk
with Homebrew. In shell run brew install tcl-tk
echo 'export PATH="/usr/local/opt/tcl-tk/bin:$PATH"' >> ~/.zshrc
Terminal
app or run source ~/.zshrc
tck-tk
is in $PATH
. Run echo $PATH | grep --color=auto tcl-tk
. As the result you should see your $PATH contents with tcl-tk
highlightedexport 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
then uninstall it with pyenv uninstall <your python version>
. E.g. pyenv uninstall 3.8.2
python-build
. In shell run 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'"
Note: in future use tck-tk
version that actually installed with Homebrew. At the moment of posting 8.6
was the actualpyenv
with pyenv install <version>
. E.g. pyenv install 3.8.2
Test
pyenv global <verion that you've just installed>
idle
. You should see IDLE window without any warnings and "text printed in red".tkinter
. In shell run python -m tkinter -c "tkinter._test()"
. You should see test window like on the image:That's it!
My environment:
check this is something went wrong executing steps above:
zsh
(included in macOS Catalina) = "shell" abovepyenv
(installed with Homebrew and PATH updated according to pyenv
official readme from GitHub)3.8.x
- 3.9.x
(installed with pyenv install <version>
command)I never got this to work. I spent a ton of time on this page as well as a number of other sites, and tried everything. It seems that Homebrew Python and Tcl-Tk are at this time not out of the box the same version, and it's a common issue. What I did end up doing was to install both pyenv and anaconda side by side as per the excellent instructions of @Simba here, and using Anaconda my Tcl-Tk commands are working fine. Posting here so that others don't fall down this rabbit hole, or if they do and find a solution, it would be wonderful to know.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With