我正在尝试为我的条目
创建一个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未被激活。
你在犯一个很常见的错误。 您的函数是在程序执行时执行的,因为您在.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_: