【发布时间】:2020-03-21 12:53:01
【问题描述】:
我通过子类化QMainWindow 并覆盖keyPressEvent 和keyReleaseEvent 函数来处理多个按键操作,然后在按键是否按下时更新字典...
def keyPressEvent(self,event):
self.pressedKeys[event.key()] = True
def keyReleaseEvent(self,event):
self.pressedKeys[event.key()] = False
...pressedKeysArray 是:
pressedKeys = {Qt.Key_Left: False,
Qt.Key_Right: False,
Qt.Key_Down: False,
Qt.Key_Up: False}
但是,我希望能够捕捉到双右箭头单击,例如在 100 或 200 毫秒内。我将扩展pressedKeys 字典以包含可设置为True 或False 的双击键,但我不知道如何知道该键是否已连续快速按下两次。
到目前为止,这是我的代码:
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
import sys
class MainWindow(QMainWindow):
pressedKeys = {Qt.Key_Left: False,
Qt.Key_Right: False,
Qt.Key_Down: False,
Qt.Key_Up: False}
def __init__(self,parent=None,*args,**kwargs):
QMainWindow.__init__(self,parent,*args,**kwargs)
self.parent = parent
self.timer = QTimer()
self.timer.timeout.connect(self.keyAction)
self.timer.start(50)
self.show()
def keyPressEvent(self,event):
self.pressedKeys[event.key()] = True
def keyReleaseEvent(self,event):
self.pressedKeys[event.key()] = False
def keyAction(self):
if self.pressedKeys[Qt.Key_Left] and self.pressedKeys[Qt.Key_Down]: print("rolling left")
elif self.pressedKeys[Qt.Key_Right] and self.pressedKeys[Qt.Key_Down]: print("rolling right")
elif self.pressedKeys[Qt.Key_Left]: print("running left")
elif self.pressedKeys[Qt.Key_Right]: print("running right")
elif self.pressedKeys[Qt.Key_Down]: print("crouching") #return here to block effect of 'up' key being pressed
if self.pressedKeys[Qt.Key_Up]: print("jumping")
def exceptHook(exectype,value,traceback):
sys.__excepthook__(exectype,value,traceback)
if __name__ == "__main__":
sys.excepthook = exceptHook
app = QApplication(sys.argv)
mainWindow = MainWindow()
app.quit()
【问题讨论】:
-
更详细地解释你想要什么,然后指出你想要解决的问题。
-
我希望能够知道何时快速连续按两次键,并在发生这种情况时将变量设置为 true。我不知道从哪里开始
标签: python-3.x pyqt5 keyevent qkeyevent