我注意到了qa应用程序处理关键事件时的一些异常行为,这会危及我希望制作的小游戏。在
按住一个键会导致keyPressEvent
和随后的keyReleaseEvent
方法被重复调用(而且非常频繁),而不是触发keyPressEvent
一次,然后等待释放该键来触发另一个方法(这是期望的和公认的预期行为)。在
这会导致巨大的性能问题,以至于按住多个键会导致一些键被程序完全忽略,这可能是因为事件队列正在受到影响。在
此程序演示重复调用:
from PyQt4 import QtGui
import sys
class Window(QtGui.QWidget):
def __init__(self):
super(Window, self).__init__()
def keyPressEvent(self, event):
print 'PRESSED'
event.accept()
def keyReleaseEvent(self, event):
print 'RELEASED'
event.accept()
app = QtGui.QApplication(sys.argv)
Window().show()
sys.exit(app.exec_())
这个程序(我用来测试Qt游戏潜力的一个愚蠢的图形化的东西)演示了在按住现有键时忽略新的按键。在
^{pr2}$正如您可以通过运行上述程序观察到的那样,按住超过3或4个键将不会产生新的峰值,直到当前保持的键被释放。在
我如何防止这种行为,使得keyPressEvent
对于一个没有物理释放的密钥只触发一次?在
1条回答
网友
使用event.isAutoRepeat()可能会有所帮助
例如