グラフィックユーザインターフェース 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" でランタイムに指定することです。

真にスタンドアロンなアプリケーションにするためには、ライブラリを成す
Tcl スクリプトもアプリケーションに統合されていなければなりません。それ
をサポートするツールの一つは SAM (stand-alone modules) で、Tix ディス
トリビューション (https://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
オプションを参照してください)。
