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


Python のプラットフォーム非依存の GUI ツールキットには何がありますか？
======================================================================

Depending on what platform(s) you are aiming at, there are several.


Tkinter
-------

Standard builds of Python include an object-oriented interface to the
Tcl/Tk widget set, called Tkinter.  This is probably the easiest to
install and use. For more info about Tk, including pointers to the
source, see the Tcl/Tk home page at https://www.tcl.tk.  Tcl/Tk is
fully portable to the Mac OS X, Windows, and Unix platforms.


wxWidgets
---------

wxWidgets (https://www.wxwidgets.org) は、C++ で書かれたフリーでポータ
ブルな GUI クラスライブラリで、各プラットフォームのネイティブなルック
アンドフィールを提供します。現在、Windows、Mac OS X、GTK、X11 はすべて
安定した対象です。言語バインディングは Python、Perl、Ruby などの言語で
利用できます。

wxPython (http://www.wxpython.org) が wxWidgets の Python バインディン
グです。これはたいてい公式の wxWidgets より少し遅れますが、他の言語バ
インディングでは利用できない機能も pure Python 拡張経由でいくつか提供
しています。wxPython ユーザと開発者の活発なコミュニティがあります。

wxWidgets も wxPython も、フリーなオープンソースソフトウェアであり、寛
大なライセンスでフリーウェアやシェアウェアと同様に商業利用も許可されて
います。


Qt
--

Qt ツールキットへのバインディング (PyQt または PySide) や KDE へのバイ
ンディング (PyKDE4) があります。PyQt は現在 PySide よりも発達していま
すが、プロプライエタリなアプリケーションを書くには  Riverbank
Computing から PyQt ライセンスを購入しなければなりません。PySide は全
てのアプリケーションに対してフリーです。

Qt 4.5 以降は LGPL ライセンスでライセンスされています。また、商用ライ
センスも The Qt Company から利用できます。


Gtk+
----

PyGtk bindings for the Gtk+ toolkit have been implemented by James
Henstridge; see <http://www.pygtk.org>.


FLTK
----

簡潔かつ強力で成熟したクロスプラットフォームウィンドウシステム the
FLTK toolkit の Python バインディングが the PyFLTK project から利用で
きます。


OpenGL
------

OpenGL のバインディングは、 PyOpenGL を参照してください。


Python のプラットフォーム固有の GUI ツールキットには何がありますか？
====================================================================

PyObjc Objective-C bridge をインストールすることによって、Python プロ
グラマは MacOS X の Cocoa ライブラリを使うことができます。

Mark Hammond による Pythonwin には Microsoft Foundation Class のインタ
フェースと Python プログラミング環境が含まれています。これは MFC クラ
スを用いて主に Python で書かれています。


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


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

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

一つの解決策は、アプリケーションに Tcl と Tk ライブラリを同梱し、環境
変数 "TCL_LIBRARY" と "TK_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 オプションを参照してください)。
