[英]PyQt5 store time of keyPressEvent
问题:
我有一个程序,我将在其中显示几个带有堆叠小部件的页面,用户必须按下一个按钮(使用我在下面编写的代码)到 go 到堆叠小部件的下一页。 我要做的是计算用户的反应时间。 因此,要衡量他们按下按钮的速度。
可能的解决方案:
我正在考虑存储按下键的时间(点 B)和显示页面的时间(点 A),并减去这些点以获得反应时间。 我正在考虑使用在所有页面中运行的 QTimer,每当按下一个键时,它都会将时间存储在一个变量中(即 b 点)。 并存储页面显示的时间(点 a),减去这些点得到反应时间。 但是,我是编码的初学者,不知道如何编码。 或者是否有更简单的方法。
我想到的第二个解决方案是使用 QElapsedTimer,但我也不知道如何编写代码。
按钮按下:
我还创建了一个 QWidget 的子类,每次按下“F”或“J”键(KeybaordWidget)时都会发出一个信号。 所以我在想,我需要编写一个 function 来完成我所描述的操作,并将 function 连接到“fPress”或“jPress”信号。
class KeyboardWidget (QWidget):
fPress = pyqtSignal(str)
jPress = pyqtSignal(str)
def keyPressEvent(self,event):
if event.key() == Qt.Key_F:
self.fPress.emit('f')
elif event.key() == Qt.Key_J:
self.jPress.emit ('j')
在keyPressEvent
方法中,您可以使用time.time()
,并将其保存在KeyboardWidget
class 的属性中。 在下一次keyPressEvent
调用中,您可以再次获取时间,从第二次中减去第一次,您将获得用户在两次按钮按下之间所需的时间(以毫秒为单位)。
import time
class KeyboardWidget(QWidget):
...
def __init__(self):
QWidget.__init__(self)
self.last_time = time.time()
def keyPressEvent(self,event):
actual_time = time.time()
print(actual_time - self.last_time) # will print the duration since the button was pressed the last time in milliseconds
self.last_time = actual_time
if event.key() == Qt.Key_F:
self.fPress.emit('f')
elif event.key() == Qt.Key_J:
self.jPress.emit ('j')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.