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

