4

Win API を使用して記述された GUI アプリケーションがあり、ユーザーがコマンド メニュー項目を選択したときに新しい GUI アプリケーションを起動する必要があります。PyQt で新しいアプリケーションを作成し、Python C Api を使用して PyQt アプリケーションを起動することにしました。

PyQtアプリケーションを起動する親ウィンドウが、 PyQtアプリケーションが開いているときに一部のイベントに応答しないことを除いて、すべて正常に機能しています。PyQt アプリケーションを閉じると、キー イベントへの応答が再開されます。

PyQt Gui アプリケーションが起動されると、どういうわけかメッセージが親ウィンドウに渡されないと思います。

Spy++ で検査すると、次の結果が見つかりました。

Receives messages for:
  - ALT key
  - F1, F2 keys
  - Mouse events

Does NOT receive messages for:
  - CTRL key
  - All other Fn keys
  - All letter keys
  - SHIFT, CAPS keys

この問題を解決するための考えをいただければ幸いです

4

2 に答える 2

0

QtWinMigrate1 つの解決策は、モジュールをビルドしQWinHostてネイティブ HWND へのペアレント化をサポートする を作成することですが、残念ながらそれは PyQt ディストリビューションの一部ではありません。

ここでいくつかのソースを見つけることができます: https://github.com/glennra/PyQtWinMigrate

これは、Blur studio による 3ds Maxでの Python 統合のために行わなければならなかったことです。私は現在、QWinWidget の C++ ソース コードを調べており、Win32 呼び出しを使用して代替ソリューションを見つけられるかどうかを確認しています。

于 2013-11-29T15:37:51.460 に答える
0

あなたがやろうとしていること、つまり単一のプロセス内で 2 つの別々の GUI を操作することは、主要なオペレーティング システムではサポートされていないと思います。しばらく前に、これを行う方法を長い間探しましたが、「しない」以外のアドバイスはありませんでした。

キーの紛失だけが問題であることに驚きました.別の問題が発生する前に、別の解決策を見つけることをお勧めします (これが少なくとも機能するはずであるという良い証拠を見つけられない限り)。

代わりに、Qt イベント ループを実行する新しいプロセスを作成していただけないでしょうか。メイン プロセスにはすでに python が埋め込まれているので、これはかなり簡単なはずです。python の組み込み IPC を使用して、プロセス間の通信を処理します。

于 2012-07-12T02:50:06.147 に答える