我正在编写一个简单的GUI,它将在特定点打开一个opencv窗口。该窗口具有一些非常基本的keyEvents来控制它。我想通过一些功能来推进这一点。由于我的QtGui是我的控制器,因此我认为使用KeyPressedEvent这样做是一种好方法。我的问题是,如果我在opencv窗口上处于活动状态,则无法触发KeyEvent。
如果我的Gui不在焦点内,那么我该如何触发KeyEvent?
我真的需要使用GrabKeyboard吗?
以下代码重现了我的问题:
import sys
from PyQt5.QtWidgets import (QApplication, QWidget)
from PyQt5.Qt import Qt
class MainWindow(QWidget):
def __init__(self):
super().__init__()
self.setFocusPolicy(Qt.StrongFocus)
def keyPressEvent(self, event):
print('Key Pressed!')
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
keyPressEvent方法仅在窗口小部件具有焦点时才被调用,因此如果焦点具有另一个应用程序,则不会被通知,因此,如果要检测键盘事件,则必须处理OS库,但是在python中它们已经存在库将这些更改报告为pyinput
(pyinput
):
python -m pip install pyinput