Python Tkinter 绑定Label到Enter事件调用hii函数无响应怎么解决?
问题原因
- Tkinter的事件绑定回调被触发时,会默认传入1个事件对象参数,你定义的
hii()没有设置接收参数的形参,调用时会触发参数数量不匹配的错误,因此函数无法正常执行,在运行控制台可以看到对应的TypeError报错。
解决方案
方案1:给回调函数增加事件形参
如果后续需要用到触发事件的相关信息(比如触发部件、坐标等),直接添加event形参即可:
# 新增event参数接收Tkinter传入的事件对象 def hii(event): print("hii")
方案2:兼容不需要事件对象的场景
如果业务逻辑用不到事件对象,可以用两种方式处理:
- 用可变参数占位
def hii(*args): print("hii")
- 绑定时用lambda忽略参数
label.bind("<Enter>", lambda event: hii())
完整可运行修正代码
from tkinter import * def hii(event): print("hii") m_root = Tk() m_frame = Frame(m_root) m_display = Label(m_frame) label = Label(m_root,text="hii") label.bind("<Enter>",hii) label.pack() m_display.pack() m_frame.pack() m_display.update() m_root.mainloop()
内容的提问来源于stack exchange,提问作者Deoj
相关产品推荐
相关产品推荐

