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

如何在Pygame中将SQLite数据渲染为对齐规整的排行榜表格

Pygame排行榜文本对齐解决方案
  • 对齐失效核心原因:字符串格式化补空格的对齐逻辑仅对等宽字体生效,Pygame默认使用的普通非等宽字体中,每个字符、空格的渲染宽度都不相同,所以补多少空格都没法实现精准对齐。

方案1:拆分双列独立渲染(最推荐,兼容性最好)

直接把玩家名、得分拆成两个独立的文本对象分别渲染,固定玩家名列左对齐坐标,得分列按统一的右边缘基准坐标对齐,完全不受字体类型影响,修改后代码示例:

def leader_board():
    i = 35
    # 定义两个列的固定坐标:玩家名列左对齐X坐标,得分列右对齐基准X坐标
    PLAYER_COL_X = dis_width / 5
    SCORE_COL_RIGHT_X = dis_width * 3 / 5  # 可自行调整数值匹配你需要的得分表头位置

    # 表头拆分渲染
    player_header = font_style.render('PLAYER', True, yellow)
    dis.blit(player_header, [PLAYER_COL_X, (700 / 4) + 5])
    score_header = font_style.render('SCORE', True, yellow)
    # 得分表头右对齐到预设的基准X坐标
    dis.blit(score_header, [SCORE_COL_RIGHT_X - score_header.get_width(), (700 / 4) + 5])

    cur.execute('SELECT * FROM snake_score ORDER BY score desc LIMIT 10')
    rows = cur.fetchall()
    for row in rows:
        # 玩家名左对齐渲染
        player_text = font_style.render(str(row[0]), True, yellow)
        dis.blit(player_text, [PLAYER_COL_X, (700 / 4) + i + 5])
        # 得分右对齐渲染:X坐标 = 基准右X - 得分文本自身宽度
        score_text = font_style.render(str(row[1]), True, yellow)
        dis.blit(score_text, [SCORE_COL_RIGHT_X - score_text.get_width(), (700 / 4) + i + 5])
        i += 35

方案2:切换为等宽字体

如果你不想改动现有渲染逻辑,可以直接把使用的字体替换为系统等宽字体,原有format格式化的代码就可以正常生效,字体初始化示例:

# 替换为系统自带的等宽字体,字号和你原有设置保持一致即可
font_style = pygame.font.SysFont('Courier', 24)

该方案缺点是依赖运行环境中存在你指定的等宽字体,否则会 fallback 到默认非等宽字体,仍然会出现对齐问题,仅适合本地自用场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 19:36:03