Tkinter中canvas.tag_bind传参报错,如何正确传递两个参数?
Tkinter Canvas绑定事件传递参数的正确写法
你遇到的错误是因为Tkinter的tag_bind绑定的回调函数会自动传入一个事件对象作为第一个参数,但你写的lambda x,y要求两个参数,触发时只传了事件给x,y没有对应的值,所以报缺少位置参数的错误。
修正方法很简单,只需要让lambda接收这个默认的事件参数,然后在内部调用你的validateLogin时传入需要的username和password即可:
# 正确的绑定写法 canvas.tag_bind(obj1, '<Button-1>', lambda event: self.validateLogin(username, password)) # 你的validateLogin方法不需要修改 def validateLogin(self, username, password): # 你的业务逻辑代码 ...
如果不需要用到事件对象,也可以给lambda的参数加默认值,写法更简洁:
canvas.tag_bind(obj1, '<Button-1>', lambda event=None: self.validateLogin(username, password))
额外注意
如果username和password是来自输入框这类动态变化的控件,建议在lambda里实时获取控件的当前值,避免拿到绑定lambda时的旧值:
# 假设username_entry和password_entry是输入框控件 canvas.tag_bind(obj1, '<Button-1>', lambda event: self.validateLogin(username_entry.get(), password_entry.get()))
内容的提问来源于stack exchange,提问作者pegah zahedi
相关产品推荐
相关产品推荐

