Python3.5 Tkinter Entry回车事件绑定触发TypeError参数不匹配问题
问题成因
- tkinter的
bind()方法绑定事件回调函数时,事件被触发后会自动向回调函数传入1个事件对象参数,该参数包含触发事件的具体信息(比如触发控件、按键值等)。 - 你定义的
return_entry没有声明任何形参,触发回车事件时tkinter自动传入的1个参数没有接收位置,就抛出了takes 0 positional arguments but 1 was given的报错。 - 你感知的“矛盾”实际并不存在:报错描述的是tkinter自动触发调用时的传参情况,你手动调用时传任意参数能成功,刚好印证了这个函数只要收到1个参数就能正常运行,和报错逻辑完全一致。
解决方法
方案1:添加占位形参接收事件对象
如果不需要用到事件对象的信息,随便给个形参名即可:
# 加event形参接收自动传入的事件对象,不用也没关系 def return_entry(event) : content = ew.get() print(content)
方案2:设置可选形参兼容手动调用场景
如果你有时候需要手动不带参数调用这个函数,把形参设为默认值即可:
def return_entry(event=None) : content = ew.get() print(content) # 以下两种调用方式都能正常运行 # ew.bind('<Return>', return_entry) # 事件触发自动传参 # return_entry() # 手动调用不传参
方案3:绑定时用lambda吞掉事件参数
不想修改原有函数定义的话,可以在绑定的时候用匿名函数中转:
# 原有函数不用改 def return_entry() : content = ew.get() print(content) # 绑定的时候用lambda接收事件参数,调用原函数时不传参 ew.bind('<Return>', lambda e: return_entry())
内容的提问来源于stack exchange,提问作者dlemper
相关产品推荐
相关产品推荐

