首页 > 解决方案 > 键绑定导致功能在启动时自动运行

问题描述

我正在尝试为 my 创建一个键绑定Entry,它获取用户输入的内容Entry,然后调用一个函数。

我的代码:

def nameValidation(name):
    if PresenceCheck(name) and LengthCheck(name,2) and DataTypeCheck(name,str):
        print("Valid Name")
    else:
        nameEntry.configure(bg="red")
nameEntry = tk.Entry(root,textvariable=nameInput,bg="white",font=("Arial",28))
nameEntry.grid(row=2,column=2)
nameEntry.bind("<FocusOut>",nameValidation(nameInput.get()))

当我运行代码时,它Entry是红色的,表明该函数已被调用,即使键绑定没有被激活。

标签: pythonfunctiontkintertkinter-entry

解决方案


你犯了一个非常常见的错误。您的函数在程序执行时执行,因为您在.bind().

解决此问题的一种方法是添加一个lambda.

代码:

def nameValidation(name, event = None):
    if PresenceCheck(name) and LengthCheck(name,2) and DataTypeCheck(name,str):
        print("Valid Name")
    else:
        nameEntry.configure(bg="red")
nameEntry = tk.Entry(root,textvariable=nameInput,bg="white",font=("Arial",28))
nameEntry.grid(row=2,column=2)
nameEntry.bind("<FocusOut>", lambda: nameValidation(nameInput.get()))

希望这可以帮助!


如评论中所述,lambda: event如果您想要匿名功能,请使用。如果您遇到错误,请使用lambda _:


推荐阅读