首页 > 解决方案 > 解释按住的键

问题描述

我正在构建一个Raspberry Pi用 Python 编写的流动站,我希望通过SSH. 因此,我会运行脚本,然后希望漫游车实时按照我提供的方向移动,就像遥控车一样(想想上键、下键、左键、右键)。

我在网上读到其中一种可能性可能是使用该pygame.key.get_pressed()功能,但这在我的外壳中不起作用。当我在我的raspberry pipython shell 中运行该命令时,我只收到一个零元组,它在几分之一秒后超时。

我的代码如下:

speed = input('How fast do you want the rover to go? Give a value lower than 1: ')

while True:
    keys = pygame.key.get_pressed()  #checking pressed keys
    if keys == True:
        if keys[pygame.K_UP]:
            fwd(speed)
        if keys[pygame.K_DOWN]:
            bwd(speed)
    if keys == False:
        MS.motor1off
        MS.motor2off     

具有fwdbwd是在向前和向后方向激活电机的功能。

当我运行脚本时,它通过循环正常,但电机不响应所持有的钥匙。当我添加一个打印语句时,我注意到这也没有打印到控制台上。

请问有人知道如何进行吗?

标签: pythonpygamekeypress

解决方案


我不是 pygame 专家,也从未使用过key.get_pressed()方法。我用event.get()哪个效果很好。这是我使用的代码的最小示例:

import pygame

pygame.init()

WINDOW_WIDTH = 250
WINDOW_HEIGHT = 120

pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT))

while True:
    for event in pygame.event.get():        
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_w:
                print('works!')

您必须确保初始化 pygame 并创建一个窗口,并且该窗口必须处于焦点中。然后它将起作用。如果这对您不方便,那么您必须挂钩键盘的按键事件,以便获得全局按键,无论哪个窗口处于焦点。

希望这可以帮助。


推荐阅读