如何使用Python检测键盘输入并播放声音?

4

我正在制作一个程序,当你按下键盘上的键(或仅仅是输入)时,它会播放声音。

我刚开始着手处理它,我尝试使用 pygame.key.get_pressed()来检查键盘输入。以下是我的代码:

from pygame import init, key

init()

spam = []

while True:
    spam = key.get_pressed()
    if True in spam:
        print('KEY PRESSED')
    elif False in spam:
        print('NONE')

它的工作方式是检查是否在spampygame返回的列表的名称)中有一个True值。key.get_pressed返回一个列表,其中包含每个键的True/False值,如果按下,则为True,否则为False
这段代码存在问题,当我运行它时,它只输出None。这意味着我没有检测到键盘输入。
如果有人知道如何修复此问题或更好的方法,请告诉我,非常感谢!
谢谢!
1个回答

1

pygame.key.get_pressed()可以获取所有键盘按钮的状态,它返回一个列表。
但是,请注意pygame.key.get_pressed()返回的值只有在通过pygame.event.get()从队列中获取键事件时才会更新。简单来说,pygame.key.get_pressed()仅在有事件循环的情况下才有效。

您可以评估特定的按键(例如空格键):

allKeys = pygame.key.get_pressed()
spam = allKeys[pygame.K_SPACE] 

如果您想评估是否按下了任何键,则需要评估allKeysany()值是否为True
allKeys = pygame.key.get_pressed()
anyKey = any([k for k in allKeys if k == True])

另一种解决方案是检查是否发生了KEYDOWN事件。下一个待处理的事件可以通过pygame.event.get()获取:

keyPressed = False
for event in pygame.event.get():
    if event.type == pygame.KEYDOWN: 
        keyPressed = True

如果您不介意的话,能否解释一下这部分代码:any([k for k in allKeys if k == True]) - Jack H.
@JackH。这是非常基础的Python。[ ]生成一个列表。列表的元素都是k,其中kfor k in allKeys,如果条件k == True被满足。因此,它是一个包含所有值为TrueallKeys元素的列表。any()如果列表包含任何元素,则返回True - Rabbid76
抱歉,我花了一些时间。由于某些原因它不起作用。我不知道为什么。如果你知道原因,将不胜感激。谢谢! - Jack H.
它没有引发任何错误,但它无法检测到按键被按下。 - Jack H.
@JackH。pygame.key.get_pressed()返回的值只有在通过pygame.event.get()从队列中获取键事件时才会更新。简单来说,如果没有事件循环,pygame.key.get_pressed()就无法工作。 - Rabbid76
我需要设置一下,谢谢。 - Jack H.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接