使用 PyQt4 (4.10.3) 和 Qt4 (4.8.5) 我有一个应用程序应该在按下 Shift 键时改变其外观。该代码在 Mac OSX 中完美运行:只要我按下 Shift 键,就会调用我的 keyPressEvent() 方法,并显示一个用于 Shift 的 keyPress 的事件。Ctl(mac 上的 Cmd)和 Alt(opt)相同。
相同的代码在 Linux 和 Windows 上失败,因为在这些平台上,修改键的按下事件似乎没有立即传递。我可以按 Shift 并且没有任何反应,但是当我释放Shift 键时,我的 keyPressEvent() 和 keyReleaseEvent() 方法会立即按该顺序调用。或者,如果在按住 Shift 的同时按下像“X”这样的数据键,我的 keyPressEvent 会被调用两次,分别是 Shift 键,然后是具有 shift 修饰符状态的 Key_X。
我对如何获得任何修饰键的实时通知感到困惑。我尝试添加一个原始 event() 处理程序,并在任何事件上询问 QApplication.queryKeyboardModifiers。似乎即使是 QApplication 也不知道修改键被按下,直到它们被释放......?