グラフィックユーザーインターフェイスに関するFAQ
一般的なGUIの質問
Python用にプラットフォームに依存しないGUIツールキットは何ですか?
目的のプラットフォームに応じて、いくつかあります。 それらのいくつかはまだPython3に移植されていません。 少なくとも Tkinter と Qt はPython3と互換性があることがわかっています。
Tkinter
Pythonの標準ビルドには、 tkinter と呼ばれるTcl / Tkウィジェットセットへのオブジェクト指向インターフェースが含まれています。 これはおそらくインストールして使用するのが最も簡単です(Pythonのほとんどのバイナリディストリビューションに含まれているため)。 ソースへのポインタを含むTkの詳細については、 Tcl / Tkホームページを参照してください。 Tcl / Tkは、Mac OS X、Windows、およびUnixプラットフォームに完全に移植可能です。
wxWidgets
wxWidgets( https://www.wxwidgets.org )は、C ++で記述された無料のポータブルGUIクラスライブラリで、Windows、Mac OS X、GTKなどのさまざまなプラットフォームでネイティブのルックアンドフィールを提供します。 、X11、すべて現在の安定したターゲットとしてリストされています。 言語バインディングは、Python、Perl、Rubyなどの多くの言語で利用できます。
wxPython は、wxwidgetsのPythonバインディングです。 多くの場合、公式のwxWidgetsリリースよりもわずかに遅れていますが、他の言語バインディングでは利用できない純粋なPython拡張機能を介して多くの機能も提供しています。 アクティブなwxPythonユーザーおよび開発者コミュニティがあります。
wxWidgetsとwxPythonはどちらも、フリーウェアやシェアウェアだけでなく、商用製品でも使用できるパーミッシブライセンスを備えた無料のオープンソースソフトウェアです。
Qt
Qtツールキット( PyQt または PySide のいずれかを使用)およびKDE( PyKDE4 )で使用可能なバインディングがあります。 現在、PyQtはPySideよりも成熟していますが、プロプライエタリアプリケーションを作成する場合は、 Riverbank Computing からPyQtライセンスを購入する必要があります。 PySideはすべてのアプリケーションで無料です。
Qt 4.5以降は、LGPLライセンスの下でライセンスされています。 また、商用ライセンスは The Qt Company から入手できます。
Gtk +
Python用の GObjectイントロスペクションバインディングを使用すると、GTK +3アプリケーションを作成できます。 Python GTK +3チュートリアルもあります。
の古いPyGtkバインディング Gtk +2ツールキット JamesHenstridgeによって実装されました。 http://www.pygtk.org >。
Kivy
Kivy は、デスクトップオペレーティングシステム(Windows、macOS、Linux)とモバイルデバイス(Android、iOS)の両方をサポートするクロスプラットフォームのGUIライブラリです。 PythonとCythonで記述されており、さまざまなウィンドウバックエンドを使用できます。
Kivyは、MITライセンスの下で配布されている無料のオープンソースソフトウェアです。
Python用に存在するプラットフォーム固有のGUIツールキットは何ですか?
PyObjc Objective-Cブリッジをインストールすることにより、PythonプログラムはMac OSXのCocoaライブラリを使用できます。
MarkHammondによる Pythonwin には、Microsoft Foundation Classesへのインターフェイスと、MFCクラスを使用して主にPythonで記述されたPythonプログラミング環境が含まれています。
Tkinterの質問
Tkinterアプリケーションをフリーズするにはどうすればよいですか?
Freezeは、スタンドアロンアプリケーションを作成するためのツールです。 Tkinterアプリケーションをフリーズする場合、アプリケーションにはTclおよびTkライブラリが引き続き必要であるため、アプリケーションは真にスタンドアロンではありません。
1つの解決策は、TclおよびTkライブラリとともにアプリケーションを出荷し、 TCL_LIBRARY
および TK_LIBRARY
環境を使用して実行時にそれらを指すことです。変数。
真にスタンドアロンのアプリケーションを入手するには、ライブラリを形成するTclスクリプトもアプリケーションに統合する必要があります。 これをサポートするツールの1つは、Tixディストリビューション( http://tix.sourceforge.net/ )の一部であるSAM(スタンドアロンモジュール)です。
SAMを有効にしてTixをビルドし、Tclsam_init()
などへの適切な呼び出しを実行します。 PythonのModules/tkappinit.c
内で、libtclsamおよびlibtksamとリンクします(Tixライブラリも含めることができます)。
I / Oの待機中にTkイベントを処理できますか?
Windows以外のプラットフォームでは、そうです。スレッドも必要ありません。 ただし、I / Oコードを少し再構築する必要があります。 TkにはXtのXtAddInput()
呼び出しと同等のものがあり、ファイル記述子でI / Oが可能な場合にTkメインループから呼び出されるコールバック関数を登録できます。 ファイルハンドラーを参照してください。
Tkinterでキーバインディングを機能させることができません:なぜですか?
bind()
メソッドでイベントにバインドされたイベントハンドラーは、適切なキーが押されても処理されないという苦情がよく聞かれます。
最も一般的な原因は、バインディングが適用されるウィジェットに「キーボードフォーカス」がないことです。 focusコマンドのTkドキュメントを確認してください。 通常、ウィジェットはクリックすることでキーボードフォーカスが与えられます(ただし、ラベルの場合はそうではありません。takefocusオプションを参照してください)。