一般的な GUI の質問

Tkinter の質問

Tkinter アプリケーションを凍結するにはどうしますか?

Freeze はスタンドアロンアプリケーションを生成するツールです。Tkinter アプリケーションを凍結するとき、それは Tcl と Tk ライブラリを必要とするので、真のスタンドアロンにはなりません。

一つの解決策は、アプリケーションに Tcl と Tk ライブラリを同梱し、環境変数 TCL_LIBRARYTK_LIBRARY でランタイムに指定することです。

真にスタンドアロンなアプリケーションにするためには、ライブラリを成す Tcl スクリプトもアプリケーションに統合されていなければなりません。それをサポートするツールの一つは SAM (stand-alone modules) で、Tix ディストリビューション (http://tix.sourceforge.net/) の一部です。

SAM を有効にするように Tix をビルドして、Python の Modules/tkappinit.c 内部の Tclsam_init() 等への適切なコールを実行し、libtclsam と libtksam にリンクしてください (Tix ライブラリを含んでも良いです)。

I/O を待つ間に扱われる Tk イベントを作れますか?

Windows 以外のプラットフォームについては、はい、スレッドさえ必要ありません! ただし、I/O コードを少し再構成しなければなりません。Tk には Xt の XtAddInput() コールと同等なものがあるので、ファイルディスクリプタ上で I/O が可能なときに Tk メインループから呼ばれるコールバック関数を登録できます。 ファイルハンドラ を参照してください。

Tkinter で働くキーバインディングが得られません。なぜですか?

bind() メソッドでイベントに結び付けられたイベントハンドラが、適切なキーが押されたときにさえハンドルされないという苦情がよく聞かれます。

最も一般的な原因は、バインディングが適用されるウィジェットが “キーボードフォーカス” を持たないことです。Tk ドキュメントでフォーカスコマンドを確認してください。通常はウィジェットの中をクリックすることでキーボードフォーカスを与えられます (ただしラベルには与えられません。takefocus オプションを参照してください)。