# グラフィックユーザインターフェース 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 オプションを参照してください)。