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

我相信您正在尝试做的事情——在一个进程中操作两个单独的 GUI——不受任何主要操作系统的支持。不久前,我搜索了很长时间的方法来做到这一点,除了“不要”之外从未提出任何建议。

我很惊讶丢失的钥匙是你唯一的问题。我建议在你发现更多麻烦之前找到一个不同的解决方案(除非你能找到一些很好的证据证明这至少应该有效)。

您是否可以生成一个新进程来运行 Qt 事件循环?由于您已经在主进程中嵌入了 python,这应该相当容易——使用 python 的内置 IPC 来处理进程之间的通信。

于 2012-07-12T02:50:06.147 回答
0

一种解决方案是构建QtWinMigrate模块以创建QWinHost支持原生 HWND 的父级,但不幸的是它不是 PyQt 发行版的一部分。

你可以在这里找到一些来源:https ://github.com/glennra/PyQtWinMigrate 。

这是Blur studio 在 3ds Max中集成 Python 必须要做的。我目前正在研究 QWinWidget 的 C++ 源代码,看看是否可以使用 Win32 调用制定替代解决方案。

于 2013-11-29T15:37:51.460 回答