繁体   English   中英

PyQt5 keyPressEvent的存储时间

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM