父窗口没有收到窗口的消息(主要事件)

时间:2012-06-28 14:51:23

标签: winforms qt winapi pyqt windows-messages

我有一个使用win API编写的GUI应用程序 当用户选择一些命令菜单项时,我们需要启动一个新的GUI应用程序。 我们决定在PyQt中编写新的应用程序并使用Python C Api启动PyQt应用程序。

一切正常,除了父窗口,我们通过它启动PyQt应用程序,没有响应PyQt应用程序打开时的某些事件。一旦我们关闭PyQt应用程序,它就会再次开始响应关键事件。

我想,一旦PyQt Gui应用程序启动,消息就会以某种方式传递给Parent窗口。

使用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

任何解决这个问题的想法都将不胜感激

2 个答案:

答案 0 :(得分:0)

我相信您要做的事情 - 在一个进程中运行两个单独的GUI - 任何主要操作系统都不支持。不久前,我搜索了很长时间的方法来做到这一点,从来没有提出任何建议,除了“不要”。

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

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

答案 1 :(得分:0)

一种解决方案是构建QtWinMigrate模块以创建QWinHost,它支持对本机HWND进行父级,但遗憾的是它不是PyQt分发的一部分。

您可以在此处找到一些来源:https://github.com/glennra/PyQtWinMigrate

这是3ds Max by Blur studio中Python集成必须完成的工作。我目前studying the C++ source code of QWinWidget也看到我是否可以使用Win32调用找出替代解决方案。