🐍

tkinterで作成した入力フォームで日本語が入力できない時の解決方法

2021/12/29に公開

はじめに

最近PythonでGUIプログラミングを行う際に利用するtkinterについて調べていたところ、Macの特定の環境で日本語入力が行えないことがわかりました。

入力フォームで日本語を入力しようとしてもできない
( まあまあ と入力しようとしているのに maamaa になってしまっている)

これはtkinterが依存しているTcl/Tkパッケージのバージョン 8.5 で発生するもので、pyenv経由でのPythonインストールやmacOS 10.6以降のユーザでMac版Pythonインストーラを使っている方は該当するらしい、ということがわかりました。
よって、それなりにたくさんのユーザに影響が出ていそうな問題であるため、Zennにもこの問題に関する内容をポストしようと思いました。

(こちらの内容は自身のブログにポストしたtkinterでPython GUIプログラミング入門の中で書いたものですが、同じ問題に直面した人がすぐに問題の解決方法を見つけられるようにZennにもこの内容のみをポストしています。私のブログよりもZennのほうがSEOは強いので、こちらのほうが問題に直面したより多くの人の解決の助けになるのでは?と思ったためです。)

本題

では本題です。
まず下記のコマンドを打って 8.5 と返ってきた場合、該当する(日本語が入力できない)バージョンとなります。

python -c "import tkinter;print(tkinter.TkVersion)"
# => 8.5

この問題に対する解決方法について公式にもページがあります。

https://www.python.org/download/mac/tcltk/

結論から先に書いてしまうと、Pythonのversionを新しいものにすれば、それについてくるTcl/Tkパッケージも新しいものになるので、新しいPythonを利用するようにすればこの問題は解決します。

私はpyenvを利用してPython環境を構築しているので、下記のようにPythonの 3.10.1 をインストールしました。
(上のドキュメントを読んだ限りでは 3.9.8 以降でも良さそうでしたが、 3.9 系の環境では試していません)

pyenv install 3.10.1

# globalで設定していますが、環境ごとに分けたいならlocalを使用してください
pyenv global 3.10.1

3.10.1 を入れると、TkVersion も 8.6 になります。

python -c "import tkinter;print(tkinter.TkVersion)"
# => 8.6

これで日本語入力ができない問題は解決しました。

入力フォームに日本語が入力できている

Discussion