pygtkの覚え書き

今日はpygtkで作成したアプリケーション中でpythonのTimerモジュールを使ってみたのですが、
Timerに指定した時間が経過しても、指定した関数が呼び出されませんでした。。

いろいろしらべてみると、

gtk.gdk.threads_init()

を呼び出してpygtkスレッドの初期化を行わないとダメだということがわかりました。
上記の初期化関数呼び出しは、gtk.main()よりも前に行わなければならないとAPIリファレンスにかかれていました。

でめでたしめでたし。。と思ったのですが、そうでもありませんでした。

gtk.gdk.threads_init()
gtk.main()

だけでは、起動直後に固まってしまいました。

gtk.gdk.threads_init()

gtk.gdk.threads_enter()
gtk.main()
gtk.gdk.threads_leave()

とすることで固まらずに起動しました。

そして、Timerモジュールを使った部分も正常に動作しました。

それにしても、pythonのタイマってスレッドのサブクラスだったんですね。。。初めてしりました。(笑