📑

PySimpleGUIをmacOSで使うとGraph上の文字が表示されない問題の解決

2020/09/25に公開

エラーの発端

Pythonで手早くGUIを作れるライブラリであるPySimpleGUIでは、さまざまなユースケースを想定したdemoファイルが準備されている。

しかし、ことGraphを使用するdemoファイルにおいて、macのローカル環境で使用してみても表示されるべき文字が一切表示されないという状況に苦しんだ。

コード自体はおかしくないものだから、DrawTextdraw_textにしたり、本質的でない試行を繰り返してしまった。

原因

まず、前提としてPySimpleGUIはtkinterという標準モジュールのラッパーである。

macOSのPythonで使用されるtkinterのバージョンは8.5であるが、このバージョンはmacOSとの相性が悪く、PySimpleGUIに限らず随所で文字が表示されないトラブルを発生させている悪名高きバージョンなのである。

対策

tkinterのバージョンを8.6にアップデートする。
ただし、公式でサポートされている手法はない。

macOSでtkinterを8.6にアップデートする方法

gistにtkinter8.6 をパッケージした Python3.8.1のインストールファイルをアップロードしてくれている天才がいるので、その方法に従う。

手順

以下は、すでにhomebrewでインストールしてあるPythonをtkinter8.6対応のPython3.8.1に置換するというのが前提である。

  • 既存Pythonのアンインストール
brew uninstall python
  • brewのキャッシュ削除
brew cleanup
  • brewのアップデート
brew update
  • Pythonパッケージをbrew配下にダウンロード
FRMPTH="/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/python.rb"; rm $FRMPTH; curl -L -o $FRMPTH https://gist.github.com/iexa/2ac761bfd96ab78988b76c030d54a5b8/raw/python-with-tcl.rb
  • ダウンロードしたパッケージを使用してインストール
HOMEBREW_NO_AUTO_UPDATE=1 brew install --build-from-source python
  • インストール結果の確認(8.6と出れば成功)
$ python3 -c "import tkinter;print(tkinter.TkVersion)"
8.6

あとは煮るなり焼くなり好きにPySimpleGUIを使うのがよろしい。

付記

個人ブログの方にも同様の記事を投稿しており、そちらには本題から逸れるが付随的に発生するエラーの情報も記載した。

Discussion