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

pygame_gui文本框重置后输入内容消失问题求助

问题描述

使用pygame_gui库的UITextEntryLine文本框,想要实现按下回车键时,将文本框内容打印到控制台并清空文本框。但目前存在以下问题:

  • 文本框清空后无法正常接收新输入,必须先点击背景区域,再重新点击文本框才能输入内容
  • 尝试将重置文本改为'A',文本框仍显示为空,且内容仅显示不足一秒就消失,重新点击文本框才恢复显示
解决方法

问题根源在于事件处理顺序错误:你先处理了自定义的UI_TEXT_ENTRY_FINISHED事件逻辑,再让manager处理该事件,导致pygame_gui内部的状态(比如焦点)和文本框实际内容不一致,引发输入异常。

修正方案是调整事件处理顺序:先让manager.process_events(event)处理所有事件,再执行自定义的打印和清空逻辑。

修正后的完整代码

import pygame_gui, pygame

pygame.init()
screen = pygame.display.set_mode((500,500))

clock = pygame.time.Clock()
manager = pygame_gui.UIManager((500,500))
manager.set_window_resolution((500,500))

text_box = pygame_gui.elements.UITextEntryLine(relative_rect=pygame.Rect(200,200,100,50), manager=manager, object_id='#text')

run=True
while run:
    UI_refresh = clock.tick(30)/1000

    for event in pygame.event.get():
        # 先让manager处理所有事件,确保内部状态同步
        manager.process_events(event)
        
        if event.type == pygame.QUIT: 
            run=False
        elif event.type == pygame_gui.UI_TEXT_ENTRY_FINISHED and event.ui_object_id == '#text':
            print(text_box.text)
            text_box.set_text('')

    manager.update(UI_refresh)

    screen.fill('white')
    manager.draw_ui(screen)

    pygame.display.update()

说明

将manager.process_events(event)移到自定义事件判断之前,pygame_gui会先完成UI_TEXT_ENTRY_FINISHED事件的内部处理(比如焦点维护),之后再执行我们的清空操作,此时文本框会保持焦点状态,清空后可以直接输入新内容,不会出现显示异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 11:44:52