You need to enable JavaScript to run this app. 如何在Pygame中更新显示用户输入的文本内容
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pygame中更新显示用户输入的文本内容

Pygame文本输入退格后旧内容残留解决方案

这个问题的核心原因是你仅更新了存储输入内容的text变量,没有在每帧渲染前清空上一帧的绘制内容,旧文本的渲染结果一直残留在窗口缓冲区,所以不会随变量更新消失。

你写的退格处理逻辑本身没有问题,只需要调整主循环的渲染顺序即可:

  • 每帧所有绘制操作开始前,先调用screen.fill()用背景色填充整个窗口,清除上一帧的全部残留内容。该操作必须放在所有绘制逻辑的最前面,示例背景为白色的写法:screen.fill((255,255,255))
  • 清屏完成后,再重新渲染当前最新的text内容,以及窗口内的其他UI元素
  • 所有内容绘制完成后,再调用pg.display.flip()或pg.display.update()刷新窗口显示

完整的主循环参考代码:

import pygame as pg

pg.init()
# 初始化窗口、字体
screen = pg.display.set_mode((400, 300))
input_font = pg.font.SysFont("宋体", 48)
input_text = ""
bg_color = (255, 255, 255)
text_color = (0, 0, 0)
running = True

while running:
    # 固定第一步:清空上一帧内容
    screen.fill(bg_color)

    # 事件处理逻辑
    for event in pg.event.get():
        if event.type == pg.QUIT:
            running = False
        if event.type == pg.KEYDOWN:
            if event.key == pg.K_BACKSPACE:
                # 你的原有退格逻辑无需修改
                input_text = input_text[:-1]
            else:
                # 普通字符输入逻辑,可按需扩展过滤规则
                input_text += event.unicode
    
    # 绘制最新文本
    text_surf = input_font.render(input_text, True, text_color)
    screen.blit(text_surf, (50, 120))

    # 刷新窗口
    pg.display.flip()

pg.quit()

注意不要把清屏操作放到事件处理分支里,必须保证每轮主循环都执行清屏+重绘逻辑,否则只有触发输入事件时画面才会更新,仍可能出现内容残留

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 04:45:01