【发布时间】:2012-06-30 03:06:22
【问题描述】:
我有一个使用 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
任何解决此问题的想法将不胜感激
【问题讨论】:
-
所以你的意思是父窗口不是Qt小部件?你是如何启动 QApplication 的?在单独的线程中?您是否在 Qt 小部件中处理 F1、F2 按键事件?
-
是的,父窗口不是 QtWigget,它完全使用 C 和 WinAPI 编写,PyQt 窗口是通过在 C 代码中嵌入 python 解释器来启动的。
-
好吧 QApplication 应该通过调用 exec() 来运行,这是一个阻塞调用,所以我猜你是在单独的线程中运行它。而且我希望没有任何按键被发送到父窗口,因为它不是 PyQt 窗口的父窗口小部件。
-
使用Python C API,我们可以导入python模块并运行它,最终调用QApplication的exec()方法。我们没有使用任何新线程来启动 PyQt 应用程序,除了 Key 事件之外,仍然没有任何内容被阻塞。
标签: winforms qt winapi pyqt windows-messages