如何从pygame菜单中的text_input字段中获取值



我正在尝试应用pygame菜单库(https://pygame-menu.readthedocs.io)。我如何从菜单的文本输入字段中提取"名称"值-该字段在我开始游戏时包含的值,即严格地在我按下"播放"并进一步处理这个值-传递给我的班级"游戏"。搞不清文档。也许有人发现了这个?

import pygame
import pygame_menu
# A class that defines the game environment and launches the gameplay
# Works successfully without a menu
from game import Game
# I need this function from `button('Play', start_the_game)` to start the game
# and NAME is the value that I need to extract from the field 'Name' and pass it
# to the instance of me class Game
def start_the_game(NAME):
Game(NAME).run()    # Launches the actual game

pygame.init()
screen = pygame.display.set_mode(900, 600)
screen.fill((0,0,0))
menu = pygame_menu.Menu("Let's play!", 400, 300,
theme=pygame_menu.themes.THEME_DARK)
menu.add.text_input('Name :', default='A Player')
menu.add.button('Play', start_the_game)
menu.add.button('Quit', pygame_menu.events.EXIT)
menu.mainloop(screen)

看起来您应该尝试:player_name = menu.add.text_input('Name :', default='A Player')然后尝试:start_the_game(player_name.get_value())

根据文件,更标准的方法可能是:player_name = menu.add.text_input('Name :', default='A Player', onchange=get_name)然后定义一个函数,比如:

def get_name(value):
player_name = value

我对此进行了测试,两种方法都能获得值,尽管这两种方法需要在正确的时间传递值的方法略有不同。为了澄清,这将获得值,并在调用时将其传递给start_the_game函数:

name_box = menu.add.text_input('Name :', default='A Player')
menu.add.button('Play', start_the_game, name_box)

如果您的start_the_game函数是这样的:

def start_the_game(NAMEBOX):
GAME(NAMEBOX.get_value()).run()

这个答案来自mole1000的一条评论。

最终版本:

import pygame
import pygame_menu
from catch_ball import CatchBall
import settings

def start_the_game(namebox):
CatchBall(namebox.get_value()).run()

def main():
pygame.init()
screen = pygame.display.set_mode((settings.screen_width,
settings.screen_height))
menu = pygame_menu.Menu('Cath a ball!',
settings.menu_width, settings.menu_height,
theme=pygame_menu.themes.THEME_DARK)
name_box = menu.add.text_input('Name: ',)
menu.add.button('Play', start_the_game, name_box)
menu.add.button('Quit', pygame_menu.events.EXIT)
menu.mainloop(screen)

if __name__ == '__main__':
main()

最新更新