Tkで発覚した衝撃の事実

最近のスクリプト言語PerlRubyPythonなど)はGUIを簡単に作れるよう標準でTkを搭載していることが多い。このTkというやつ、元はTclという言語のものだったということは広く知られている。だからTkってのはTclのいちライブラリであって、それを他のスクリプト言語に移植したもの、みたいな感じなんだろうなと自分はずっと思っていた。しかし実際は違った。これらはTclという言語も含めて導入されている。Tkを使ってGUIを作ろうとするとTclのコードが実行されてGUIが作られる。だから以下のようにTkを使わずTclの機能だけを使うこともできる。

# Python 3.2.2
import tkinter
t = tkinter.Tcl()
t.eval('puts {hello world}')
t.eval('set x 2')
t.eval('set x [expr $x + 3]')
t.eval('puts "2 足す 3 は $x です。"')

これを踏まえてTkinterのソースを読むと、Tkinterが抱えている色々な制限や奇妙な動作が少しは納得できる。