グラフィックユーザーインターフェイスに関するFAQ—Pythonドキュメント

提供:Dev Guides
< PythonPython/docs/3.8/faq/gui
移動先:案内検索

グラフィックユーザーインターフェイスに関するFAQ

一般的なGUIの質問

Python用にプラットフォームに依存しないGUIツールキットは何ですか?

目的のプラットフォームに応じて、いくつかあります。 それらのいくつかはまだPython3に移植されていません。 少なくとも TkinterQt は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ライセンスの下で配布されている無料のオープンソースソフトウェアです。


FLTK

FLTKツールキットのPythonバインディングは、シンプルでありながら強力で成熟したクロスプラットフォームウィンドウシステムであり、 PyFLTKプロジェクトから入手できます。


OpenGL

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


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オプションを参照してください)。