键绑定导致功能在启动时自动 运行
Keybind causes function to run automatically on startup
我正在尝试为我的 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
显示为红色,表示该函数已被调用,即使键绑定未激活。
你犯了一个很常见的错误。您的函数在执行程序时执行,因为您在 .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 _:
我正在尝试为我的 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
显示为红色,表示该函数已被调用,即使键绑定未激活。
你犯了一个很常见的错误。您的函数在执行程序时执行,因为您在 .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 _: