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

为什么已在pygame中执行blit操作的文本无法正常显示?

Pygame文本不显示问题修复方案

问题根源

  • 文本绘制时机错误:代码在进入主事件循环前仅执行了一次文本绘制操作,主循环启动后会持续绘制覆盖全屏的图片,直接将提前绘制的文本完全覆盖,因此无法观察到文本内容
  • 额外注意:代码中使用的time.sleep()会阻塞pygame事件队列处理,长时间阻塞容易触发系统判定程序无响应,若追求更好的运行效果可替换为pygame内置的时钟帧率控制方案

修复后代码

import pygame
import time

pygame.init()

screen = pygame.display.set_mode((800, 600))
image1 = pygame.image.load('frog.gif')
image2 = pygame.image.load('frog.jpg')
pygame.display.set_caption('\'Dancing frog\'')
image1 = pygame.transform.scale(image1, (800, 800))
image2 = pygame.transform.scale(image2, (800, 800))
font = pygame.font.SysFont('Calibri', 25, True, False)
text = font.render('this should appear', True, (255, 255, 255))

run = True
while run:
    # 绘制第一张图片后叠加文本
    screen.blit(image1, (0, -200))
    screen.blit(text, [10, 10])
    pygame.display.update()
    time.sleep(0.2)
    
    # 绘制第二张图片后叠加文本
    screen.blit(image2, (0, -200))
    screen.blit(text, [10, 10])
    pygame.display.update()
    time.sleep(0.2)
    
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False       
pygame.quit()

核心修改逻辑

Pygame的屏幕绘制遵循后绘制的内容层级更高的规则,因此所有需要显示在上层的元素,都要放在底层元素绘制完成后、屏幕刷新前执行绘制操作。文本属于上层元素,因此需要每次绘制完图片后都重新绘制一次文本,保证不会被新绘制的图片覆盖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 16:36:05