You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tkinter绑定带输入参数函数到控件报TypeError问题咨询

问题产生原因

Tkinter框架的事件绑定机制有固定规则:当绑定的事件被触发时,框架会自动向绑定的回调函数传入1个位置参数,这个参数就是存储了事件详情(比如触发坐标、触发组件、鼠标按键类型等)的event对象。
你定义的lambda:print_text(txt='label was clicked')是一个不接收任何位置参数的匿名函数,事件触发时Tkinter强行给它传入了event参数,参数数量不匹配,就抛出了TypeError: lambda() takes 0 positional arguments but 1 was given的错误。

代码中的错误点
  • 事件绑定的lambda函数没有定义接收event对象的位置形参,无法接收Tkinter自动传入的事件参数
  • 自定义的print_text函数第一个位置参数为event,你在lambda中调用该函数时仅传入了txt关键字参数,就算给lambda加上event形参,不把event传入print_text的话还是会触发"缺少位置参数event"的报错
修正后的可运行代码

只需要调整lambda的形参定义,调用print_text时传入event即可:

import tkinter

root=tkinter.Tk()
root.title('Form Title')
root.geometry('400x200+700+350')

def print_text(event, txt):
    print(txt)

lbl1=tkinter.Label(master=root, text='Click ME!', bg='green')
# 给lambda添加event形参,调用print_text时按位置传入event
lbl1.bind('<Button-1>', lambda event: print_text(event, txt='label was clicked'))
lbl1.place(x=10, y=10)

root.mainloop()

如果你不需要在print_text函数里使用event对象的任何属性,也可以给event参数设置默认值,省去传参的步骤:

# event设为默认参数None,不传入也不会报错
def print_text(txt, event=None):
    print(txt)

lbl1=tkinter.Label(master=root, text='Click ME!', bg='green')
# lambda仍然需要接收event,只是调用print_text时不需要再传event
lbl1.bind('<Button-1>', lambda event: print_text(txt='label was clicked'))
lbl1.place(x=10, y=10)

内容的提问来源于stack exchange,提问作者Shervin Farzin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 20:57:21