TkinterでUnicode絵文字を表示する

Created on 2016-08-18


Python2.7とTkinterで書かれたアプリケーションが、絵文字を表示するとこんなエラーを投げていることに気がついた。

TclError: character U+1f604 is above the range (U+0000-U+FFFF) allowed by Tcl

これ、アプリケーションの問題ではなく、CPythonとtk/tclのコンパイルオプションの問題。 該当するコードなどを見たところ、CFLAGS=-DTCL_UTF_MAX=6--enable-unicode=ucs4を指定してCPython, tcl, tkをリビルドすれば表示できます。 自分の環境だと、このような手順でコンパイルしたら動いた。😄

# build.sh
export CFLAGS=-DTCL_UTF_MAX=6
export MAKEFLAGS=-j5

tar xf tcl8.6.6-src.tar.gz
tar xf tk8.6.6-src.tar.gz
git clone https://github.com/python/cpython

cd tcl8.6.6/unix
./configure --enable-threads --enable-shared --enable-symbols --enable-64bit --enable-langinfo --enable-man-symlinks
make
sudo checkinstall
cd ../..

cd tk8.6.6/unix
./configure --enable-threads --enable-shared --enable-symbols --enable-64bit --enable-man-symlinks
make
sudo checkinstall
cd ../..

cd cpython
git checkout -b 2.7 remotes/origin/2.7
./configure --enable-shared --enable-optimizations --enable-ipv6 --enable-unicode=ucs4 --with-lto --with-signal-module --with-pth --with-wctype-functions --with-tcltk-includes=/usr/local/include/ --with-tcltk-libs=/usr/local/lib/
make
sudo checkinstall

参考