You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在激活pygame_menu文本框时自动清空内容?

解决pygame_menu文本框选中自动清空的问题

你的代码存在两个核心问题导致功能失效并报错:

  1. 回调函数参数不匹配:pygame_menu的onselect回调会传递两个参数(选中状态布尔值、控件对象),但你定义的clear_text只接收一个参数,触发时会抛出参数数量错误。
  2. 清空逻辑无效:原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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 00:33:10