python - 键绑定导致功能在启动时自动运行
问题描述
我正在尝试为 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
是红色的,表明该函数已被调用,即使键绑定没有被激活。
解决方案
你犯了一个非常常见的错误。您的函数在程序执行时执行,因为您在.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 _:
推荐阅读
- encoding - 解析器未正确编码字符串
- java - Eclipse提供“创建Java虚拟机失败”
- visual-studio-code - 使用 CodeRunner 扩展的 VS Code 的 C++ 问题
- c# - 无法为 ASP.NET Gridview 激活 RowDataBound 事件
- react-native - 我在 expo 框架中使用钩子反应原生,即使我添加了一个空数组,整个代码也会重复 3 次
- html - css position:sticky - top:0 垂直滚动很好,但 left:0 水平滚动不粘
- hibernate - 从 OneToMany 关系中提取记录的休眠标准
- python - 如何从excel文件中取消透视多索引数据
- python - 如何在相似的行名上使用 Pandas 识别模式
- .net - Authorize.Net AIM/SIM API 和 Simple Checkout 正式弃用