You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用pygame可用显示模式列表外的原生320x480分辨率?

问题原因

pygame 底层依赖的 SDL 库在窗口全屏模式下,默认会从显示器 EDID 信息读取支持的分辨率列表,匹配最接近用户设置的参数。你在 /boot/config.txt 中配置的是自定义 HDMI 模式,没有被纳入 SDL 读取的分辨率列表,所以 list_modes() 无法识别,会自动 fallback 到最近的 640x480 分辨率。

解决方案

方案1:禁止SDL自动切换显示模式(适用带桌面的X11环境)

在 pygame.init() 之前添加环境变量配置,告诉 SDL 不要修改当前已有的显示模式,直接沿用 framebuffer 的 320x480 分辨率,修改后的代码如下:

import os
# 核心配置:禁止SDL切换显示模式
os.environ['SDL_VIDEO_X11_NOMODEVSET'] = '1'
import pygame

pygame.init()
    
width = pygame.display.Info().current_w
height = pygame.display.Info().current_h

# 增加硬件加速和双缓冲标志,避免自动适配
surface = pygame.display.set_mode((width, height), pygame.FULLSCREEN | pygame.HWSURFACE | pygame.DOUBLEBUF)
surface.fill((255, 0, 0))
pygame.display.update()

方案2:直接使用framebuffer驱动(适用无桌面的纯控制台环境)

如果你的程序在没有运行桌面环境的控制台直接启动,可以指定 SDL 使用 fbcon 驱动直接读写 framebuffer,完全绕过分辨率匹配逻辑:

import os
# 指定SDL使用framebuffer驱动
os.environ['SDL_VIDEODRIVER'] = 'fbcon'
import pygame

pygame.init()
    
width = pygame.display.Info().current_w
height = pygame.display.Info().current_h

surface = pygame.display.set_mode((width, height), pygame.FULLSCREEN)
surface.fill((255, 0, 0))
pygame.display.update()

额外验证步骤

如果上述方案没有生效,可以检查以下配置:

  • 确认 /boot/config.txt 中的自定义HDMI模式配置没有写错,重启后运行 fbset 命令确认输出的分辨率确实是 320x480
  • 如果你使用的是树莓派设备,可以在 raspi-config 中关闭 OpenGL 硬件加速驱动,使用 Legacy 驱动重试

内容的提问来源于stack exchange,提问作者user1318499

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 10:57:01