当前位置: 首页 > 面试题库 >

确定Python中按键的长度

苏鸿羽
2023-03-14
问题内容

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

据我了解,应该通过检测并标记KEYDOWN事件和KEYUP事件并加时间戳,并适当减去时间戳来实现。因此,检测到KEYDOWN和KEYUP事件就足够了。

关于SO的检测和按键检测或单个字符输入检测等各种各样的问题和答案,都使用某种形式的getch。我看过python
curses库,从中可以看出,密钥检测的主要形式也是单字符getch()形式。但是这些不能检测按键的长度—它们只能检测KEYDOWN。

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


问题答案:

#使用pynput模块:( 最佳)

您可以使用以下代码:

from pynput import keyboard 
import time

def on_key_release(key): #what to do on key-release
    time_taken = round(time.time() - t, 2) #rounding the long decimal float
    print("The key",key," is pressed for",time_taken,'seconds')
    return False #stop detecting more key-releases

def on_key_press(key): #what to do on key-press
    return False #stop detecting more key-presses

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

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

with keyboard.Listener(on_release = on_key_release) as release_listener: #setting code for listening key-release
    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



 类似资料:
  • 问题内容: 假设我想用python编写一个非常简单的程序来指示长按一个键。所以如果我键入并按住“j”键几分钟,我 我想写一个程序,能够显示像’的关键信息按下“j”键1.1秒。 据我所知,实现这一点的方法应该是通过检测为KEYDOWN事件和KEYUP事件添加时间戳,并使 时间戳的减法。所以检测KEYDOWN和keypup就足够了事件。有各种各样的问题和答案,所以关于检测一个单次按键或关于检测单字符输

  • 问题内容: 是否有可能使系统似乎已按下某个键,例如我需要使按键被按下数千次,而手动执行该操作很费时间,我想写点东西来做对我来说,我唯一了解的是Python。 更好的表达方式是,我需要模拟一个按键,IE无法捕获按键。 更多信息(按要求):我正在运行Windows XP,需要将密钥发送到另一个应用程序。 问题答案: 安装pywin32扩展。然后,您可以执行以下操作: 搜索WScript.Shell对象

  • 本文向大家介绍Python中按值来获取指定的键,包括了Python中按值来获取指定的键的使用技巧和注意事项,需要的朋友参考一下 Python字典中的键是唯一的,但不同的键可以对应同样的值,比如说uid,可以是1001。id同样可以是1001。这样的话通过值来获取指定的键,就不止一个!而且也并不太好处理。这里同样提供两种思路来处理。 方法一: 方法二: 上面的两种方法可以很方便高效的来处理字典中按值

  • 本文向大家介绍Python中按键来获取指定的值,包括了Python中按键来获取指定的值的使用技巧和注意事项,需要的朋友参考一下 Python中按键来获取值,相对来说要容易些,毕竟只需要dict[key]就可以找到,但里面同样有个问题,如果其中的键不存在的话,会抛出异常,如果不用try...except...等异常处理机制的话,程序就会中断!这里提供两种很安全,很健壮的处理方法。  方式一: dic

  • 我尝试了以及鼠标按钮和修改键。最后我到了一个地步,我被它的行为弄糊涂了。 通常我使用

  • 问题内容: 我正在用python开发一个秒表类型的程序,我想知道如何检测是否按下了一个键(例如p表示暂停,s表示停止),而我不希望它像raw_input这样等待用户输入,然后继续执行。有人知道如何在while循环中执行此操作吗? 另外,我想做这个跨平台的,但是如果那不可能,那么我的主要开发目标是linux 问题答案: 对于那些在窗户上努力寻找可行答案的人,我的是:pynput 上面的功能将打印你按