PyQt5-连按两下相同的键盘键

问题描述 投票:0回答:1

我正在通过继承QMainWindow并覆盖keyPressEventkeyReleaseEvent功能来处理多次按键,然后在按键是否按下的情况下更新字典...

  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词典,使其包含可以设置为TrueFalse的双击键,但是我不知道如何快速连续按下两次该键。

到目前为止是我的代码:

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()
python-3.x pyqt5 keyevent qkeyevent
1个回答
0
投票
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.last_pressed = None self.timer = QTimer() self.timer.setSingleShot(True) self.timer.timeout.connect(self.clear_pressed) self.show() def clear_pressed(self): self.last_pressed = None def keyPressEvent(self,event): self.pressedKeys[event.key()] = True if self.timer.isActive(): if self.last_pressed == event.key(): print('Double') self.timer.stop() else: self.last_pressed = event.key() self.timer.start(200) self.keyAction() def keyReleaseEvent(self,event): self.pressedKeys[event.key()] = False self.keyAction()
© www.soinside.com 2019 - 2024. All rights reserved.