如何在激活pygame_menu文本框时自动清空内容?
你的代码存在两个核心问题导致功能失效并报错:
- 回调函数参数不匹配:pygame_menu的
onselect回调会传递两个参数(选中状态布尔值、控件对象),但你定义的clear_text只接收一个参数,触发时会抛出参数数量错误。 - 清空逻辑无效:原
clear_text里只是修改了局部变量name,根本没有修改文本框控件的实际内容。
修改后的完整代码
import pygame import pygame_menu as pm import sys from pygame.locals import * WIDTH, HEIGHT = 1100, 800 WIN = pygame.display.set_mode((WIDTH, HEIGHT)) pygame.init() def clear_text(selected, widget): # 仅当控件被选中时执行清空 if selected: widget.set_value("") def first_name(name): print(name) my_theme = pm.themes.THEME_DARK.copy() my_theme.title = False my_theme.background_color = (50, 100, 200) setup_menu = pm.Menu('', WIDTH, HEIGHT) # 修改后的文本框配置 firstnametxtbox = setup_menu.add.text_input( '', textinput_id="FirstNameInput", default='First Name', maxchar=10, onselect=clear_text, onreturn=first_name ) def main(): run = True clock = pygame.time.Clock() while run: clock.tick(60) events = pygame.event.get() for event in events: if event.type == QUIT: run = False pygame.quit() sys.exit() if setup_menu.is_enabled(): setup_menu.update(events) setup_menu.draw(WIN) pygame.display.update() if __name__ == "__main__": main()
关键修改说明
- 调整回调函数签名:
clear_text现在接收selected(布尔值,标记是否被选中)和widget(文本框控件对象)两个参数,匹配pygame_menu的回调要求。 - 正确清空文本框:通过调用控件的
set_value("")方法,直接修改文本框的显示内容,而不是修改局部变量。 - 优化事件处理:原代码中
setup_menu.mainloop(WIN)会内部处理事件循环,容易和外部循环冲突,改为手动调用update和draw,逻辑更清晰。
这样修改后,点击文本框时就会自动清空原有内容,同时不会再出现参数错误。
内容的提问来源于stack exchange,提问作者bmgrice
相关产品推荐
相关产品推荐

