让 tkinter 在带有 asdf 的 macos 上使用 python 3.x

Posted

技术标签:

【中文标题】让 tkinter 在带有 asdf 的 macos 上使用 python 3.x【英文标题】:Getting tkinter to work with python 3.x on macos with asdf 【发布时间】:2020-03-19 01:24:40 【问题描述】:

所以我很难过。如何让 python 3.7.x 与 tkinter 和 asdf 一起工作?

我做了以下事情:

1) asdf local python 3.7.4

2)brew install tcl-tk

3)brew link tcl-tk --force

4) python -m venv --system-site-packages nltk

我有一些类似的代码:

import nltk
from nltk.corpus import wordnet as wn
from tkinter import *

# Let's get the first sense of vehicle
vehicle = wn.synsets('vehicle')[0]
# Let's build a concept tree
t = nltk.Tree(vehicle.name(), children=[
    nltk.Tree(vehicle.hyponyms()[3].name(), children=[]),
    nltk.Tree(vehicle.hyponyms()[4].name(), children=[]),
    nltk.Tree(vehicle.hyponyms()[5].name(), children=[]),
    nltk.Tree(vehicle.hyponyms()[7].name(), children=[
        nltk.Tree(vehicle.hyponyms()[7].hyponyms()[1].name(), children=[]),
        nltk.Tree(vehicle.hyponyms()[7].hyponyms()[3].name(), children=[]),
        nltk.Tree(vehicle.hyponyms()[7].hyponyms()[4].name(), children=[]),
        nltk.Tree(vehicle.hyponyms()[7].hyponyms()[5].name(), children=[]), nltk.Tree(vehicle.hyponyms()[7].hyponyms()[6].name(), children=[]),
        ]),
    ])
t.draw()

然后我使用 nltk 库运行包含上述代码的 python 脚本来绘制概念树。我得到以下输出:

Traceback (most recent call last):
  File "concept_tree.py", line 3, in <module>
    from tkinter import *
  File "/Users/alexander/.asdf/installs/python/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'

【问题讨论】:

【参考方案1】:

asdf python 在后台使用 pyenv,因此您可以使用所有相同的构建选项。

在 pyenv 中,您需要在安装命令前添加以下内容才能使用 tkinter 进行安装:

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'"

这也可以添加到asdf install python 3.7.4

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'" asdf install python 3.7.4

请注意,这需要在全新安装的 python 上完成。如果您已经安装了 python,则需要先卸载并重新启动,然后再使用 configure opts 运行命令。

【讨论】:

以上是关于让 tkinter 在带有 asdf 的 macos 上使用 python 3.x的主要内容,如果未能解决你的问题,请参考以下文章

如何将回车键绑定到 tkinter 中的函数?

如何将回车键绑定到tkinter中的函数?

无法在 MacOS 上使用 pyenv Python 安装 tkinter

在MacOS上,tkinter始终保持最佳状态

python 3.5 上带有 tkinter 应用程序的 Pyinstaller 问题

macOS tkinter:askopenfilename 的文件类型如何工作