pygame_gui 文本框中的文本在更改后消失 - pygame_gui 库

问题描述 投票:0回答:1

我正在使用 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')
),但由于某种原因,文本框仍然显示为空,我有同样的问题。

另外我应该提到,在设置文本时,它确实会显示更改不到一秒,然后就会消失,直到我单击屏幕上的某个位置,然后再次单击文本框以显示更改。

python textbox pygame-gui
1个回答
0
投票

更新:问题重新提出已经一天了,在我浏览完来源之后,我发现如果我们在

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()
© www.soinside.com 2019 - 2024. All rights reserved.