PyGame窗口无法打开,执行display.set_mode时崩溃求助
解决Mac OS Catalina下PyGame窗口无法打开的问题
我看到你在Mac OS Catalina(Python3.8)环境下运行PyGame代码时,卡在screen = display.set_mode([800, 500])这一行,窗口始终打不开,但相同代码在repl.it的PyGame编辑器里能正常运行。结合你的环境和代码情况,我整理了几个针对性的排查与解决方法:
一、优先排查PyGame版本兼容性
Mac OS Catalina对Python第三方库的兼容性要求比较特殊,尤其是涉及图形渲染的PyGame。你可以先确认当前安装的PyGame版本是否适配你的系统:
- 打开终端执行
pip show pygame查看版本号 - 如果版本偏旧,尝试卸载并重装适配Catalina的稳定版本:
若使用系统自带Python,记得加上pip uninstall pygame pip install pygame==2.0.0 # 这个版本对Catalina的兼容性经过较多验证--user参数避免权限问题:pip install --user pygame==2.0.0
二、修改set_mode的初始化参数
Mac平台的PyGame窗口初始化可能需要额外的显示驱动参数,你可以尝试给set_mode添加特定标志:
将原代码中的初始化行替换为以下任一写法:
# 尝试无框窗口模式,绕过系统窗口管理的部分限制 screen = display.set_mode([800, 500], display.NOFRAME)
或者:
# 使用硬件加速+缩放模式,适配Mac的显示驱动 screen = display.set_mode([800, 500], display.SCALED | display.HWSURFACE)
三、修复系统权限问题
Catalina的权限管控非常严格,PyGame可能没有获取显示权限的权限:
- 打开「系统偏好设置」→「安全性与隐私」→「隐私」标签
- 找到「屏幕录制」或「辅助功能」选项,检查你的Python3.8解释器是否在授权列表中
- 如果没有,点击列表下方的加号,找到Python3.8的安装路径并添加
- 重启终端或IDE后再运行代码
四、完善代码逻辑(避免隐性崩溃)
你的代码目前缺少窗口退出逻辑和鼠标松开的处理,这可能导致窗口无响应被系统判定为崩溃,让你误以为是初始化失败。修改后的完整代码参考:
from pygame import * from pygame.event import * init() screen = display.set_mode([800, 500], display.SCALED) RED = (255, 0, 0) mousedown = False while True: for event in get(): if event.type == QUIT: # 添加窗口退出事件,避免无响应 quit() exit() if event.type == MOUSEBUTTONDOWN: mousedown = True if event.type == MOUSEBUTTONUP: # 添加鼠标松开的状态重置 mousedown = False if mousedown: location = mouse.get_pos() draw.circle(screen, RED, location, 20) display.update()
内容的提问来源于stack exchange,提问作者CCjump21




