确定 python 中的按键长度
Determine length of keypress in python
假设我想在 python 中编写一个非常简单的程序,指示按下某个键的时间。因此,如果我键入并按住 j
键片刻,我希望编写一个能够显示 the key 'j' was pressed for 1.1 seconds
.
等信息的程序
据我了解,应该实现的方法是检测 KEYDOWN 事件和 KEYUP 事件并为其添加时间戳,并适当减去时间戳。所以检测KEYDOWN和KEYUP事件就足够了。
SO 上有各种各样关于检测单个按键或检测单个字符输入的问题和答案,例如 this one or this one,它们都使用某种形式的 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
键片刻,我希望编写一个能够显示 the key 'j' was pressed for 1.1 seconds
.
据我了解,应该实现的方法是检测 KEYDOWN 事件和 KEYUP 事件并为其添加时间戳,并适当减去时间戳。所以检测KEYDOWN和KEYUP事件就足够了。
SO 上有各种各样关于检测单个按键或检测单个字符输入的问题和答案,例如 this one or this one,它们都使用某种形式的 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
.