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

Tkinter按钮调用reset_game函数报NameError未定义如何修复

错误原因

你的reset_game函数是定义在main()函数内部的局部函数,仅在main()函数的作用域内可以访问。但你在全局代码末尾创建restart_button的时候,此时main()函数还没运行,全局作用域根本不存在reset_game这个变量,自然就抛出未定义的错误。

修复方案(改动代码最少)

只需要调整2处代码即可正常运行:

  1. 先去掉全局创建restart_button时的command参数,暂时不绑定回调:
# 原来的代码注释掉,替换为下面的代码
# restart_button = Button(text="Click Here To Restart", width=20, height=5, bg="#212121", fg="#FFFFFF", command=reset_game, font=('Ariel', 9, 'bold'), state=NORMAL)
restart_button = Button(text="Click Here To Restart", width=20, height=5, bg="#212121", fg="#FFFFFF", font=('Ariel', 9, 'bold'), state=NORMAL)
  1. 到main()函数内部,写完reset_game函数的定义后,新增一行代码手动给按钮绑定回调:
def reset_game():
    # 这里是你原来的reset_game代码,不需要修改
    ...

# 新增下面这行代码即可
restart_button.config(command=reset_game)

def stop_game():
    # 这里是你原来的stop_game代码,不需要修改
    ...

修改后逻辑完全通顺:当你点击开始游戏触发main()运行时,reset_game已经完成定义,此时给全局的重启按钮绑定上这个函数,点击按钮就能正常触发重置逻辑。

可选优化建议(不影响运行,仅规范代码)

如果后续要迭代功能,更清晰的写法是把reset_game、stop_game这类通用游戏逻辑函数移到全局作用域,把用到的抽卡按钮、输入框等组件也声明为全局变量,能避免后续再出现作用域类的错误。

内容的提问来源于stack exchange,提问作者ziv lahav

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 13:00:05