PyQt4按住一个键被检测为频繁按下和释放?PyQt4按住一个键被检测为频繁按下和释放?PyQt4按住一个键被检测为频繁按下和释放?PyQt4按住一个键被检测为频繁按下和释放?
  • 首页
  • 博客
  • 文件
  • 书签
  • 分析
  • 登录
Search
Generic filters

PyQt4按住一个键被检测为频繁按下和释放?

Published by admin at 2022年5月4日
Categories
  • Python
Tags

PyQt4按住一个键被检测为频繁按下和释放?

我注意到了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条回答

网友

1楼 ·

 

使用event.isAutoRepeat()可能会有所帮助

例如

def keyPressEvent(self, event):
    if event.isAutoRepeat():
        return
    pressed = event.key()
    if (pressed in self.keys):
        index = self.keys.index(pressed)
        self.dots[index] = self.height()+self.upper
        self.repaint()
    event.accept()

发表回复 取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注

Categories

  • 猫
  • Python
  • MySQL
  • Django
  • Html/CSS
  • JavaScript
  • Vue
  • RegExp
  • php
  • Practice
  • Virtualization
  • Linux
  • Windows
  • Android
  • NAS
  • Software
  • Hardware
  • Network
  • Router
  • Office
  • WordPress
  • SEO
  • English
  • Games
  • Recipes
  • living
  • Memorandum
  • Essays
  • 未分类

归档

©2015-2022 Alaica Blog support@alaica.com