PyQt5按键事件的存储时间

2024-10-01 00:34:15 发布

您现在位置:Python中文网/ 问答频道 /正文

问题:

我有一个程序,在这个程序中,我将显示带有堆叠小部件的多个页面,用户必须按下按钮(使用我在下面编写的代码)才能转到堆叠小部件的下一页。我想做的是计算用户的反应时间。所以要测量他们按下按钮的速度

可能的解决方案:

我想存储按键的时间(B点)和显示页面的时间(a点),然后减去这些点得到反应时间。我正在考虑在所有页面中使用一个QTimer,每当按下一个键时,它就会将时间存储在一个变量中(即b点)。并存储页面显示的时间(点a),然后减去这些点得到反应时间<然而,我是一个相当初级的编码,不知道我将如何编码这个。或者是否有更简单的方法

我想到的第二个解决方案是使用QefressdTimer,,但我也不知道如何编写代码

按钮按下:

我还创建了一个QWidget的子类,每当我按下“F”或“J”(KeybaordWidget)键时,它都会发出一个信号。所以我在想,我需要写一个函数来实现我所描述的,并将该函数连接到“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')

Tags: 代码用户self程序event信号部件时间
1条回答
网友
1楼 · 发布于 2024-10-01 00:34:15

keyPressEvent方法中,您可以使用time.time()获取自历元以来的实际时间(以毫秒为单位),并将其保存在KeyboardWidget类的属性中。在下一次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')

相关问题 更多 >