树莓派上能否不启用视频系统仅用Pygame读取游戏手柄输入?
问题:树莓派命令行运行Pygame读取手柄报错
pygame.error: video system not initialized Pygame无视频输出配置方案
可以通过设置SDL环境变量让Pygame在无视频输出的环境下运行,无需创建显示窗口。修改代码如下:
import os import pygame # 设置SDL使用dummy视频驱动,跳过视频系统初始化 os.environ["SDL_VIDEODRIVER"] = "dummy" pygame.init() joystick = pygame.joystick.Joystick(0) joystick.init() done = False while not done: event = pygame.event.poll() if event.type == pygame.JOYAXISMOTION: # 建议用内置常量代替硬编码数字1538,提升可读性 print(event.dict['value']) if event.type == pygame.QUIT: # 用内置常量代替硬编码数字1540 done = True
说明:
SDL_VIDEODRIVER=dummy会让Pygame仅加载输入处理所需模块,跳过真实视频系统初始化- 使用Pygame内置事件常量替代魔数,能让代码更易维护且适配不同平台
替代方案:使用inputs模块
如果Pygame的配置仍有问题,可使用inputs模块——它专门用于读取输入设备,不依赖视频系统,在树莓派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)
注意:不同手柄设备的输出值(按键编码、状态值等)可能存在差异,需根据实际运行结果适配调整。
内容的提问来源于stack exchange,提问作者user23628710
相关产品推荐
相关产品推荐

