为什么我的Tkinter Button的command参数会触发NameError错误?
错误原因
- 函数定义顺序不符合Python执行逻辑:Python是逐行从上到下解释执行代码的,你在创建Button组件时,给command参数传入的
start_game_pressed函数是在这行代码之后才通过def定义的,此时解释器还没读取到函数定义,自然找不到对应的名称,触发NameError。 - 回调函数参数错误:你定义的
start_game_pressed不是类的实例方法,不需要加self参数,Button触发command回调时不会传入任何参数,保留self会导致点击按钮时报参数数量不匹配的错误。
修复方案
调整代码顺序,把start_game_pressed函数的定义放到创建Button的代码之前,同时删除函数的self参数,调整后核心代码如下:
# 先定义回调函数 def start_game_pressed(): print("sus") # 再创建Button组件 start_game = Button (text_box,command=start_game_pressed, fg='black',text = """ 丂七闩尺七 """) start_game.place(x=450, y=400) # 后续其他代码保持原有逻辑即可
额外注意点
你现有代码里同时对text_box调用了pack()和place()两种布局方法,Tkinter同一父容器下只能用一种布局管理方式,混用会导致布局失效,建议删掉其中不需要的布局调用。
内容的提问来源于stack exchange,提问作者odin
相关产品推荐
相关产品推荐

