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

如何在Windows 10下创建无黑边的完美Pygame全屏?

解决Pygame全屏黑边与内容放大问题(Windows 10)

你的问题核心在于高DPI缩放适配不到位和全屏模式参数配置不完整。用pywin32替代ctypes后,没完全处理好系统DPI感知逻辑,再加上Windows的显示缩放机制,导致画面没能真正匹配显示器原生分辨率。下面是几个针对性的解决方案:

方案一:修正DPI感知与分辨率获取

先让进程正确识别系统DPI,再获取真实屏幕分辨率,这是消除黑边的基础:

import pygame
import win32api
import win32con

# 启用高DPI感知(关键步骤)
win32api.SetProcessDPIAware()
# 若你用的是Windows 8.1及以上,可使用更精准的多显示器DPI感知模式:
# win32api.SetProcessDpiAwarenessContext(win32con.DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2)

# 获取显示器原生分辨率
screen_width = win32api.GetSystemMetrics(win32con.SM_CXSCREEN)
screen_height = win32api.GetSystemMetrics(win32con.SM_CYSCREEN)

# 初始化Pygame并配置全屏模式
pygame.init()
screen = pygame.display.set_mode(
    (screen_width, screen_height), 
    pygame.FULLSCREEN | pygame.HWSURFACE | pygame.DOUBLEBUF
)

解释:

  • SetProcessDPIAware()让程序绕过Windows的缩放比例,直接读取真实分辨率;进阶的PER_MONITOR_AWARE_V2模式能更好适配多显示器场景。
  • 追加HWSURFACE和DOUBLEBUF参数可提升全屏模式的兼容性与渲染性能,减少显示异常。

方案二:使用Pygame 2.x的SCALED标志(推荐)

Pygame 2.x新增的SCALED标志能自动适配屏幕分辨率、处理高DPI缩放,完美解决内容放大和黑边问题:

import pygame

pygame.init()
# 用SCALED+FULLSCREEN组合,自动匹配原生分辨率
screen = pygame.display.set_mode((0, 0), pygame.FULLSCREEN | pygame.SCALED)
# 可获取实际生效的分辨率做后续逻辑处理
actual_w, actual_h = screen.get_size()
print(f"当前全屏分辨率:{actual_w}x{actual_h}")

这个方案无需手动处理DPI和分辨率,Pygame会自动帮你匹配显示器原生尺寸,同时保持内容比例正常,不会出现放大或黑边。

方案三:检查系统显示缩放设置

如果上述代码仍有问题,可能是Windows显示缩放比例非100%导致的:

  1. 右键桌面→显示设置
  2. 找到「缩放与布局」,将「更改文本、应用和其他项目的大小」设为100%
  3. 重启电脑后再测试

不过这是系统级设置,更推荐通过代码适配,避免要求用户修改系统配置。

额外排查点

  • 确保你的Pygame是最新2.x版本,旧版本对高DPI和全屏的支持较差。
  • 若使用多显示器,可通过pygame.display.list_modes()获取当前显示器支持的分辨率列表,选择最高规格的尺寸启动全屏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:58:28