Tkinter按钮调用reset_game函数报NameError未定义如何修复
错误原因
你的reset_game函数是定义在main()函数内部的局部函数,仅在main()函数的作用域内可以访问。但你在全局代码末尾创建restart_button的时候,此时main()函数还没运行,全局作用域根本不存在reset_game这个变量,自然就抛出未定义的错误。
修复方案(改动代码最少)
只需要调整2处代码即可正常运行:
- 先去掉全局创建
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)
- 到
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
相关产品推荐
相关产品推荐

