如何在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
相关产品推荐
相关产品推荐

