确定python中的按键长度

时间:2016-11-17 08:07:08

标签: python keypress

假设我想在python中创建一个非常简单的程序,指示按下一个键的时间。因此,如果我键入并按住j键片刻,我希望编写一个能够显示the key 'j' was pressed for 1.1 seconds等信息的程序。

据我所知,应该实现的方法是检测KEYDOWN事件和KEYUP事件并对其加时间戳,并对时间戳进行适当的减法。因此,检测KEYDOWN和KEYUP事件就足够了。

有关检测单个按键或检测单个字符输入的SO有很多种问题和答案,例如this onethis one,它们都使用某种形式的getch。我查看了python curses库,从我可以看出,密钥检测的主要形式也是单字符getch()的形式。但是这些没有检测到按键的长度 - 它们只检测KEYDOWN。

我认识到检测按键的长度是游戏中的必要任务,因此我希望pygame具有检测按键持续时间的方法。但我希望可以使用更纤薄,更直接的库来检测按键持续时间。

1 个答案:

答案 0 :(得分:2)

使用pynput模块:(最佳)

您可以使用此代码:

from pynput import keyboard 
import time

def callb(key): #what to do on key-release
    ti1 = str(time.time() - t)[0:5] #converting float to str, slicing the float
    print("The key",key," is pressed for",ti1,'seconds')
    return False #stop detecting more key-releases
def callb1(key): #what to do on key-press
    return False #stop detecting more key-presses

with keyboard.Listener(on_press = callb1) as listener1: #setting code for listening key-press
    listener1.join()

t = time.time() #reading time in sec

with keyboard.Listener(on_release = callb) as listener: #setting code for listening key-release
    listener.join()

使用pygame(好)

import time
import pygame
import os
os.environ["SDL_VIDEO_CENTERED"] = "1"

screen = pygame.display.set_mode((600, 600))
pygame.display.set_caption("Time")
clock = pygame.time.Clock()

pygame.init()

clock = pygame.time.Clock()

running = True       
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
            pygame.quit()
            break
        if event.type == pygame.KEYDOWN:
            # detect key 'a'
            if event.key == pygame.K_a: # key 'a'
                t = time.time()
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_a: # key 'a'
                t = time.time() - t; t = str(t); t = t[:5]
                print("You pressed key 'a' for",t,'seconds')


        screen.fill((255, 255, 255))
        pygame.display.update()

        clock.tick(40)

它只会检测您将在代码中写入的密钥。

使用pip install pynput安装pynput 使用pip install pygame安装pygame