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

pygame调用p.draw绘制棋盘无显示 报SIGABRT段错误异常

故障根因

代码存在两处核心错误,直接导致崩溃和渲染失败:

  • 退出事件判断写法完全错误:p.quit()是主动销毁pygame运行环境的函数,你在事件判断分支里写e.type == p.quit(),会在主循环第一次遍历事件时就直接执行该函数,把包括screen显示表面在内的所有pygame资源全部释放。后续drawBoard()还尝试向已经释放的无效内存区域写入绘制数据,直接触发段错误,也就是日志里打印的pygame_parachute: Segmentation Fault。正确的退出事件是pygame定义的常量p.QUIT,是固定枚举值,不需要加括号调用。
  • 缺少屏幕刷新步骤:pygame所有绘制操作默认都写入后台缓冲区,不会直接显示到窗口上,必须在每帧绘制完成后调用刷新接口,否则就算不崩溃,窗口也只会显示初始填充的紫色,看不到棋盘内容。
修复步骤
  • 修正退出事件判断:把if e.type == p.quit():替换为if e.type == p.QUIT:
  • 在主循环的绘制逻辑后添加屏幕刷新接口:调用p.display.update()将后台缓冲区的绘制内容同步到窗口
  • (可选)添加帧率控制,避免主循环无限制跑满CPU占用,循环正常退出后再调用p.quit()清理环境
修复后可运行代码
import pygame as p

WIDTH = 1080
HEIGHT = 720
BOARD_WIDTH = 448  # 64*7
BOARD_HEIGHT = 576  # 64*9
DIMENSION_ROW = 9
DIMENSION_COL = 7
SQUARE_SIZE = 64
MAX_FPS = 28
IMAGES = {}

MOVE_LOG_PANEL_WIDTH = 0

def main():
    p.init()
    screen = p.display.set_mode((WIDTH, HEIGHT))
    clock = p.time.Clock()
    screen.fill(p.Color("purple"))
    running = True

    while running:
        for e in p.event.get():
            if e.type == p.QUIT:
                running = False
        drawBoard(screen)
        p.display.update()
        clock.tick(MAX_FPS)
    p.quit()

def drawBoard(screen):
    colors = [p.Color("white"), p.Color("gray")]
    for r in range(DIMENSION_ROW):
        for c in range(DIMENSION_COL):
            color = colors[((r + c) % 2)]
            p.draw.rect(screen, color, p.Rect(c * SQUARE_SIZE, r * SQUARE_SIZE, SQUARE_SIZE, SQUARE_SIZE))

if __name__ == "__main__":
    main()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 07:45:30