tkinker メモ
問題
- brew で入れた python だと、tkinker が動作しなかった
bash
python3 -m tkinter
log
import _tkinter # If this fails your Python may not be configured for Tk
^^^^^^^^^^^^^^^
ModuleNotFoundError: No module named '_tkinter'
→ モジュールが見つからないと出る
解決方法
bash
brew install python-tk
bash
python3 -m tkinter
→ サンプルダイアログが出る
参考. ところで、tkinter ってなに
- Tcl/Tk : Tcl 言語用に作られた toolkit
- tk : toolkit
- inter : interface
- tkinter : Python 用の、 Tk を使うためのインターフェース
参考. 他に試したこと
試したがうまくいってないものを、過程だけ残しておく
試したこと1. Mac 標準の python3 でやる
1. 切り替え
- 標準で入ってる Python なら動作するようなので、venv で 標準 Python の環境に切り替える
bash
/usr/bin/python3 -m venv system-3.9.3
. ~/python-venvs/system-3.9.3/bin/activate
※ フルパスで呼べば良いだけかもしれないけど・・
動作確認
py
python -m tkinter
→ 🙆 最小限のボタンのついたUIが立ち上がる
→ 🙅 ただし廃止予定らしい
log
DEPRECATION WARNING: The system version of Tk is deprecated and may be removed in a future release. Please don't rely on it. Set TK_SILENCE_DEPRECATION=1 to suppress this warning.
→ 🙅 サンプルアプリも、ウィンドウは出るが ボタン等は出なかった
試したこと2. tkl-tk オプションありでビルドした
事前準備. pyenv を入れる
bash
brew install pyenv
.zshrc
# pyenv の初期化
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init --path)"
eval "$(pyenv init -)"
sh
. ~/.zshrc
tkl-tk 用のオプションありで configure / build
ビルドに使う環境変数設定に環境変数を設定
bash
export LDFLAGS="-L$(brew --prefix tcl-tk)/lib"
export CPPFLAGS="-I$(brew --prefix tcl-tk)/include"
export PKG_CONFIG_PATH="$(brew --prefix tcl-tk)/lib/pkgconfig"
tkl-tk のバージョン確認
bash
ls -l $(brew --prefix tcl-tk)
→ 9.0.1 だった ので、ビルド時は 9.0 を設定
ビルド ( configure, build )
bash
env PYTHON_CONFIGURE_OPTS="--with-tcltk-includes='-I$(brew --prefix tcl-tk)/include' --with-tcltk-libs='-L$(brew --prefix tcl-tk)/lib -ltcl9.0 -ltk9.0'" \
pyenv install 3.11.9
→ ~/.pyenv/versions/3.11.9
に作られる
ビルドして作成された Python に切り替え
bash
pyenv global 3.11.9
. ~/.zshrc # ← 注: ここに 強制的に venv activate するようなコマンドが入ってないことは前提
バージョン確認
bash
which python # ~/.pyenv/shims/python
python -V # Python 3.11.9
otool -L ~/.pyenv/versions/3.11.9/bin/python3 # ここに tk のライブラリが出ることを期待したが、出ない
以下のように出るのは、shims
にあるバイナリは wrapper 的なファイルだから。(シンボリックリンクではない)
bash
otool -L $(which python3) # ~/.pyenv/shims/python3: is not an object file
bash
python3 -m venv ~/python-venvs/gui-test
. ~/python-venvs/gui-test/bin/activate
# GUI 出るか確認
python -m tkinter
→ 出ない