我正在使用 pygame_gui 库。我正在尝试制作一个文本框,当按下输入键时,它将把框中的文本打印到控制台并重置它(因此文本框将为空)。 它确实重置了文本框,但由于某种原因,文本框没有获得任何新输入,直到我单击背景中的某个位置并再次单击文本框,然后才显示它获得的文本。
代码:
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():
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('') #here the text of the texbox is reset.
manager.process_events(event)
manager.update(UI_refresh)
screen.fill('white')
manager.draw_ui(screen)
pygame.display.update()
我尝试而不是重置文本框,将其文本设置为其他值,如“A”(我将行
text_box.set_text('')
更改为 text_box.set_text('A')
),但由于某种原因,文本框仍然显示为空,我有同样的问题。
另外我应该提到,在设置文本时,它确实会显示更改不到一秒,然后就会消失,直到我单击屏幕上的某个位置,然后再次单击文本框以显示更改。
更新:问题重新提出已经一天了,在我浏览完来源之后,我发现如果我们在
set_text之后添加行
text_box.redraw()
,它就可以解决问题,所以更新的代码是:
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():
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('') #here the text of the texbox is reset.
text_box.redraw() #this line fixes the problem.
manager.process_events(event)
manager.update(UI_refresh)
screen.fill('white')
manager.draw_ui(screen)
pygame.display.update()