Tkinter绑定Leave事件报donehovering()缺位置参数错误如何解决
Tkinter事件绑定报错修复方案
错误原因
Tkinter中使用bind()方法绑定事件回调函数时,触发事件时会自动向回调函数传入1个事件对象参数,该参数封装了事件触发位置、触发组件、事件类型等信息。你定义的hoverover()、donehovering()两个函数没有声明任何形参接收这个默认传入的参数,因此调用时会抛出参数不匹配的报错。
修复方法
方案1:为回调函数添加event形参(最推荐)
直接修改两个回调函数的定义,新增event形参即可,不需要额外使用该参数:
# 仅修改两个回调函数的定义即可 def hoverover(event): statusbar.config(text="Click to start the program already") def donehovering(event): statusbar.config(text="")
方案2:绑定时用lambda丢弃事件参数
如果你不想修改原有函数的定义,可以在绑定事件时通过匿名函数接收并丢弃事件参数:
# 仅修改两行bind绑定代码即可 button.bind("<Enter>", lambda e: hoverover()) button.bind("<Leave>", lambda e: donehovering())
补充说明
command参数绑定的回调函数不需要加event参数,是因为Tkinter对command参数的处理逻辑和bind不同,command默认不会传入任何参数,你之前写的colorchangeondemand()不需要修改。
内容的提问来源于stack exchange,提问作者Neweruser4848
相关产品推荐
相关产品推荐

