我在试着做一个树莓派控制的机器人.特别是,我想使用游戏手柄来导航机器人.我在桌面计算机上编写了以下代码来捕获游戏手柄的输入:

import pygame

pygame.init()
joystick = pygame.joystick.Joystick(0)
joystick.init()

done = False
while not done:
    event = pygame.event.poll()
    if event.type == 1538:
        print(event.dict['value'])
    if event.type == 1540:
        done = True

如果按下导航十字上的按钮,则此代码打印值(例如(1,0)),如果按下另一个按钮,则终止.

当我在raspberry pi上运行这段代码时,我得到了以下错误:

pygame.error: video system not initialized

我想问题是,我在命令行上运行代码,而pygame希望有一个视频输出窗口.但我不想有输出,我只想使用pygame读取输入.有没有一种方法可以配置pygame来做到这一点?

UPDATE

看来pygame不能达到我想要的目标(见rabbid76的回答).在我寻找替代品的过程中,我找到了模块inputs.下面的代码在raspberry pi zero上工作,可以用来读取输入:

from inputs import get_gamepad

done = False
while not done:
    events = get_gamepad()
    for event in events:
        print(event.code)
        print(event.state)
        print(event.ev_type)

我建议您自己运行代码并判断输出.输出值在我的台式计算机和raspberry pi zero上是不同的,所以你可能需要找到适合你的特定情况的正确代码.

推荐答案

不,你不能.见pygame.event:

PYGAME通过事件队列处理其所有的事件消息.本模块中的 routine 可帮助您管理该事件队列.输入队列在很大程度上依赖于pygame.display模块来控制显示窗口和屏幕模块.如果显示器尚未初始化且未设置视频模式,则事件队列可能无法正常工作.

所以你需要一个窗口和视频系统的事件处理.

Python相关问答推荐

点到面的Y距离

对整个 pyramid 进行分组与对 pyramid 列子集进行分组

' osmnx.shortest_track '返回有效源 node 和目标 node 的'无'

Python库:可选地支持numpy类型,而不依赖于numpy

基于字符串匹配条件合并两个帧

driver. find_element无法通过class_name找到元素'""

改进大型数据集的框架性能

python中的解释会在后台调用函数吗?

如何指定列数据类型

* 动态地 * 修饰Python中的递归函数

Gunicorn无法启动Flask应用,因为无法将应用解析为属性名或函数调用.'"'' "

Python pint将1/华氏度转换为1/摄氏度°°

pandas fill和bfill基于另一列中的条件

从一个df列提取单词,分配给另一个列

根据Pandas中带条件的两个列的值创建新列

VSCode Pylance假阳性(?)对ImportError的react

我怎样才能让深度测试在OpenGL中使用Python和PyGame呢?

大Pandas 中的群体交叉融合

Sknowled线性回归()不需要迭代和学习率作为参数

为什么内置的sorted()对于一个包含降序数字的列表来说,如果每个数字连续出现两次,会变慢?