PyQt:keyPressEvent 和 keyReleaseEvent - 按住不反弹

bla*_*laz 2 qt pyqt pyside

我想要实现 a QDialog,其中一个键被按下一段时间(秒)然后被释放。

我试着用keyPressEventkeyReleaseEvent函数来做这件事。

我遇到的问题是,当按下一个键时,去抖动 ( keyReleaseEvent) 发生得非常快,这在我的情况下是不希望的。

在这里,这就是我所做的:

def keyPressEvent(self, eventQKeyEvent):
    key = eventQKeyEvent.key()
    if key == 54:
    print('pressed')  # 6


def keyReleaseEvent(self, eventQKeyEvent):
    key = eventQKeyEvent.key()
    if key == 54:
    print('released')  # 6
Run Code Online (Sandbox Code Playgroud)

输出:

'pressed'
'released'
'pressed'
'released'
'pressed'
'released'
...
'pressed'
'released'
Run Code Online (Sandbox Code Playgroud)

我想得到:

'pressed'
'released'
Run Code Online (Sandbox Code Playgroud)

或者:

'pressed'
'pressed'
'pressed'
...
'pressed'
'pressed'
'released'
Run Code Online (Sandbox Code Playgroud)

ekh*_*oro 5

您需要使用isAutoRepeat

def keyReleaseEvent(self, eventQKeyEvent):
    key = eventQKeyEvent.key()
    if key == 54 and not eventQKeyEvent.isAutoRepeat():
        print('released')
Run Code Online (Sandbox Code Playgroud)