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

如何在Pygame的for循环中竖向逐行打印列表条目?

你遇到的文本堆叠问题核心是initial变量的初始化位置错误:你把initial = 70写在了遍历totalsdict的for循环内部,每次循环处理新的餐品条目时,y轴偏移量都会被重置为70,所有文本自然都会渲染到同一行。

修改要点

  • 将initial = 70移动到遍历餐品字典的for循环外部,保证偏移量只会逐行累加不会被重置
  • 把pygame.display.update()移动到所有内容渲染完成之后执行,不需要每行渲染都刷新画面,减少性能损耗
  • 调整退出逻辑的执行顺序,避免调用pygame.quit()后还会执行渲染逻辑导致报错
  • 新增每次循环先重绘背景的逻辑,避免上一帧的内容残留

修正后完整代码

import pygame
# 测试用统计字典,实际使用替换为你自己的totalsdict即可
totalsdict = {
    "汉堡": [23],
    "可乐": [15],
    "薯条": [9]
}

pygame.init()
background_colour = (231,247,146)
(width, height) = (1000, 600)
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption('Running Totals')
myFont = pygame.font.SysFont("arial", 40)
myFont2 = pygame.font.SysFont("arial", 20)
text = myFont.render("In store totals:", True, (0, 0, 0))

running = True
while running:
    # 每次循环先重绘背景,避免内容残留
    screen.fill(background_colour)
    screen.blit(text, (20, 20))
    # 偏移量在for循环外部初始化,仅赋值一次
    initial = 70
    for item, values in totalsdict.items():
        text2 = myFont2.render(f'{item.title()}: {values[0]}', True, (0,0,0))
        screen.blit(text2, (20, initial))
        initial += 40
    # 所有内容渲染完成后统一刷新画面
    pygame.display.update()
    
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

# 退出循环后再执行pygame退出,避免中途报错
pygame.quit()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 04:39:02