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

