提问者:小点点

Keybind导致函数在启动时自动运行


我正在尝试为我的条目创建一个keybind,它接受用户已经输入到条目框中的内容,然后对其调用一个函数。

我的代码:-

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()))

当我运行代码时,条目显示为红色,表示函数已被调用,即使keybind未被激活。


共1个答案

匿名用户

你在犯一个很常见的错误。 您的函数是在程序执行时执行的,因为您在.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_: