PyQt に関する限り、「すべての Qt モジュールを実装しているかどうか」に対する答えは、「はい」と「いいえ」です。しかし、ほとんどいいえ。
PyQt はSIPツールを使用してバインディングを生成します。これがどのように行われるかを理解したい場合は、PyQt と SIP の作成者がプロセスを説明する方法を次に示します。
PyQt v4 では、metasip という内部ツール (もちろん PyQt を使用して記述) を使用します。これは SIP 用の IDE のようなものです。GCC-XML を使用して最新のヘッダー ファイルを解析し、関連データを XML として metasip プロジェクトに保存します。次に metasip は、以前のバージョンの API との差分と同等の処理を行い、確認が必要な変更にフラグを立てます。これらの変更は、GUI を介して行われ、TODO リストにチェックマークが付けられます。.sip ファイルの生成は、ボタンをクリックするだけです。私の Subversion リポジトリでは、PyQt v4 は基本的に 20M の XML ファイルです。Qt v4 のマイナー リリース用に PyQt v4 を更新するには、約 30 時間かかります。
生成されたコードがどのように機能するかという点では、他のバインディング ジェネレーターの機能とあまり変わらないと思います。Python には、拡張モジュールを作成するための非常に優れた C API があります。これが、非常に多くのサードパーティ ツールが Python バインディングを備えている理由の 1 つです。C++ クラスごとに、SIP 生成コードは、C で実装された対応する Python クラスを作成します。
そのため、PyQt は Qt モジュールのかなり薄いラッパーのセットにすぎず、通常、それ自体には機能を実装していません。ただし、これにはいくつかの例外があります。
まず、PyQt はさまざまな場所にいくつかのシンタックス シュガーを追加して、Qt API を Python コーダーにとってもう少し使いやすいものにします (たとえば、新しいスタイルのシグナルとスロットのサポート)。
次に、C++ と Python の基本的な言語の違いにより、PyQt が提供しても意味のない Qt API がいくつかあります (たとえば、Python には型キャストに相当するものはありません)。
最後に、uic モジュールがあります。PySide とは異なり、PyQt はQtUiToolsモジュールをまったくラップしません。代わりに、Qt ライブラリから同等の機能を実際に実装する純粋な Python で記述されたモジュールを提供します。しかし、これは規則ではなく例外です。
上記に加えて、間違いなく他にも多くの違いや省略がありますが、ここでは取り上げませんでした (特に PyQt5 に関して)。すべての言語バインディングと同様に、基本的な目的は、完全な 1 対 1 のマッピングではなく、2 つの言語間の実用的な通信手段を提供することです。