Я обрабатываю несколько нажатий клавиш путем подкласса 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()