事件编码键盘输入

时间:2018-06-04 22:26:12

标签: python raspberry-pi event-handling pygame raspberry-pi3

我正在使用我的覆盆子pi上的python编码。 Python不是我最好的语言,所以请耐心等待。

我需要一个简单的代码来响应键盘上的击键。我这样做,所以我可以设置脉冲宽度调制,但我不需要那些代码,我已经拥有它。我主要担心的是我正在努力理解我的任务所需的pygame功能。

我希望能够键入一个键,例如"向上箭头" 并按下向上箭头每毫秒都有程序输出"up pressed"

伪代码看起来像:

double x = 1
while x == 1:
    if input.key == K_UP:
        print("Up Arrow Pressed")
    if input.key == K_q
        x = 2
    wait 1ms

pygame.quit()

由于不知道语法,我再也不知道要导入或调用的内容。

1 个答案:

答案 0 :(得分:0)

这里有一些代码可以检查是否按下键:

import pygame
pygame.init()

clock = pygame.time.Clock()
screen = pygame.display.set_mode([320,240])

done = False
while not done:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            done = True

    keys = pygame.key.get_pressed()
    if keys[pygame.K_UP]:
        print("Up Arrow Pressed")
    elif keys[pygame.K_q]:
        done = True

    clock.tick(1000)

pygame.quit()

请注意,clock.tick(1000) 将代码限制为每秒一千帧,因此不会完全等同于您所需的1毫秒延迟。在我的电脑上,我只看到大约六百帧的帧速率。

也许您应该关注按键并键入事件并切换输出?

import pygame
pygame.init()

clock = pygame.time.Clock()
screen = pygame.display.set_mode([320,240])

done = False
output = False
while not done:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            done = True
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_UP:
                output = True
        elif event.type == pygame.KEYUP:
            if event.key == pygame.K_UP:
                output = False
            elif event.key == pygame.K_q:
                done = True

    pygame.display.set_caption(f"Output Status {output}")
    clock.tick(60)

pygame.quit()

如果你运行它,你会看到在按下键时窗口的标题发生变化。