如何更新在 pygame 中显示用户输入文本?

问题描述

我正在用 pygame 编写一个基本程序,在某些方面需要从用户那里获取文本输入。我的问题是,当用户想要擦除部分文本时,旧文本会一直显示在 pygame 窗口中。 假设用户键入“23”,然后按退格键。控制台显示 2,但 pygame 窗口将继续显示 23。 我正在使用:

if event.key == pg.K_BACKSPACE:
   text = text[:-1]

解决方法

您必须在更改文本后(重新)渲染文本表面,并且必须清除每一帧中的显示:


最小示例:

import pygame

pygame.init()
window = pygame.display.set_mode((400,200))
font = pygame.font.SysFont(None,40)
clock = pygame.time.Clock()

text = ""
text_surf = font.render(text,True,(0,0))

run = True
while run:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False  
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_BACKSPACE: 
                text = text[:-1]
            else:
                text += event.unicode 
            text_surf = font.render(text,0))        

    window_center = window.get_rect().center

    window.fill((255,255,255))
    window.blit(text_surf,text_surf.get_rect(center = window_center))
    pygame.display.flip()
    clock.tick(60)

pygame.quit()
exit()

典型的 PyGame 应用程序循环必须: