我正在尝试为我的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 _: