如何在无图形界面环境下使用 Pygame 读取游戏手柄输入(树莓派适用)

胖墨吖_7971

胖墨吖_7971

2026-04-27

841人浏览

原创

如何在无图形界面环境下使用 Pygame 读取游戏手柄输入(树莓派适用)

pygame 默认依赖视频子系统来处理事件队列,因此即使仅需手柄输入,在无 gui 环境(如树莓派命令行)下也会报 “video system not initialized” 错误;本文详解原因、验证方法及更优替代方案。

pygame 默认依赖视频子系统来处理事件队列,因此即使仅需手柄输入,在无 gui 环境(如树莓派命令行)下也会报 “video system not initialized” 错误;本文详解原因、验证方法及更优替代方案。

Pygame 的事件系统(pygame.event)并非独立模块,而是深度耦合于显示子系统——官方文档明确指出:“The input queue is heavily dependent on the pygame.display module”。这意味着,即使你完全不创建窗口、不渲染任何图像,只要未调用 pygame.display.set_mode() 或至少初始化显示模块(如 pygame.display.init()),事件循环(如 pygame.event.poll())将无法正常工作,直接抛出 pygame.error: video system not initialized。

尝试“绕过”视频初始化是不可行的。以下代码看似精简,但在树莓派终端中仍会失败:

import pygame

pygame.init()  # 初始化所有模块(含 display)
# ❌ 缺少 display 初始化 → 事件队列不可用
joystick = pygame.joystick.Joystick(0)
joystick.init()

while True:
    event = pygame.event.poll()  # 此处触发错误
    if event.type == pygame.JOYAXISMOTION:
        print(f"Axis {event.axis}: {event.value}")

正确做法(仅限有桌面环境时):显式初始化显示(哪怕创建一个隐藏或最小化窗口):

import pygame
import os

# 在树莓派 CLI 下可启用虚拟帧缓冲(需提前配置)
os.environ["SDL_VIDEODRIVER"] = "dummy"  # 关键!使用 dummy 驱动

pygame.init()
pygame.display.set_mode((1, 1), pygame.DOUBLEBUF | pygame.HWSURFACE)  # 创建 1x1 像素隐藏窗口

# 后续 joystick 初始化与事件处理即可正常运行
joystick = pygame.joystick.Joystick(0)
joystick.init()

done = False
while not done:
    for event in pygame.event.get():  # 推荐用 get() 替代 poll(),更可靠
        if event.type == pygame.QUIT:
            done = True
        elif event.type == pygame.JOYAXISMOTION and event.axis == 0:
            print(f"Left stick X: {round(event.value, 3)}")

⚠️ 注意:SDL_VIDEODRIVER=dummy 方案要求系统已安装 libsdl2-dev 及 libraspberrypi-dev,且需在 pygame.init() 前设置环境变量。但该方式存在兼容性风险(尤其旧版 Pygame),不推荐作为生产环境首选。

✅ 更优实践:使用轻量级专用库 inputs
专为 Linux 输入设备设计,无需 GUI、零依赖显示系统,原生支持 /dev/input/ 事件接口,完美适配树莓派无桌面场景:

pip3 install inputs
from inputs import get_gamepad
import time

print("Gamepad listening... Press any button to exit.")
while True:
    events = get_gamepad()
    for event in events:
        # event.code 示例: 'ABS_X', 'BTN_SOUTH', 'ABS_HAT0X'
        # event.state: 0(释放)或 1(按下),模拟轴为 -32767~32767
        if event.ev_type == 'Key' and event.state == 1:
            print(f"[Button] {event.code} pressed")
        elif event.ev_type == 'Absolute':
            print(f"[Axis] {event.code}: {event.state}")

    time.sleep(0.01)  # 避免空转占用过高 CPU

? 提示:不同设备的 event.code 名称可能差异较大(如树莓派 Zero 与 PC 的手柄映射不同),建议首次运行时打印全部 event 查看实际键码,并据此编写条件逻辑(例如 if event.code == 'ABS_Y' and event.state

总结:Pygame 的设计目标是游戏开发,其输入能力是显示系统的附属功能;对于嵌入式机器人控制等纯输入场景,应优先选用 inputs、evdev 或 pygame 的底层替代方案。这不仅规避了视频初始化难题,还显著降低资源开销,提升系统稳定性与可维护性。

在线游戏
在线游戏

海量精品小游戏合集,无需安装即点即玩,休闲益智、动作闯关应有尽有,秒开即玩,轻松解压,快乐停不下来

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

2023.07.20

1751

4

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

2023.07.25

4524

7

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.31

1729

3

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

2023.08.03

26697

23

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

3227

5

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

3247

5

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

1183

5

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.10

596

4

python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2523

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.7万人学习