グラフィックユーザインターフェース FAQ
**************************************


一般的な GUI の質問
===================


Python の GUI ツールキットには何がありますか？
==============================================

Python の標準的なビルドには、 tkinter という Tcl/Tk ウィジェットセット
のオブジェクト指向インターフェースが含まれています。これは最も簡単にイ
ンストールして使えるでしょう (なぜなら、これは Python のほとんどの バ
イナリディストリビューション に同梱されているからです)。ソースへのポイ
ンタなど、 Tk に関する詳しい情報は、 Tcl/Tk ホームページ を参照してく
ださい。 Tcl/Tk は、 macOS 、Windows 、 Unix プラットフォームに完全に
ポータブルです。

対象とするプラットフォームによっては他の選択肢もあります。プラットフォ
ーム互換 および プラットフォーム固有 の GUI フレームワークのリストを
python wiki で参照できます。


Tkinter の質問
==============


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

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

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

To get truly stand-alone applications, the Tcl scripts that form the
library have to be integrated into the application as well. One tool
supporting that is SAM (stand-alone modules), which is part of the Tix
distribution (https://tix.sourceforge.net/).

Build Tix with SAM enabled, perform the appropriate call to
"Tclsam_init()", etc. inside Python's "Modules/tkappinit.c", and link
with libtclsam and libtksam (you might include the Tix libraries as
well).


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

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


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

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

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