Python Tkinter聚焦输出输入验证
我在这里看到了几个关于tkinter条目验证的问题,但每个问题似乎都坚持使用Python Tkinter聚焦输出输入验证,python,validation,tkinter,Python,Validation,Tkinter,我在这里看到了几个关于tkinter条目验证的问题,但每个问题似乎都坚持使用validate=“key”选项 虽然这对于交互式验证非常有用,但我想要的是“focusout”验证 更具体地说,我希望验证电子邮件字段。这是我迄今为止尝试过的代码,但它不起作用 import Tkinter as tk import re master = tk.Tk() def validateEmail(P): x = re.match(r"[^@]+@[^@]+\.[^@]+", P) ret
validate=“key”
选项
虽然这对于交互式验证非常有用,但我想要的是“focusout”
验证
更具体地说,我希望验证电子邮件字段。这是我迄今为止尝试过的代码,但它不起作用
import Tkinter as tk
import re
master = tk.Tk()
def validateEmail(P):
x = re.match(r"[^@]+@[^@]+\.[^@]+", P)
return (x != None)
vcmd = (master.register(validateEmail), '%P')
emailentry = tk.Entry(master, validate="focusout", validatecommand=vcmd)
emailentry.pack()
b = tk.Button(master, text="Login")
b.pack()
tk.mainloop()
关于如何验证电子邮件条目,您有什么想法吗?
%S
表示插入的字符串(如果有)。这仅对插入文本时的验证有意义。当小部件失去焦点时,不会插入任何字符,因此此参数将始终为空字符串。因为它是一个空字符串,所以验证总是会失败
您应该使用表示整个字符串的%p
此外,严格来说,验证函数应该返回布尔值而不是对象。您应该将匹配结果保存在一个变量中,然后返回类似
return(match不是None)
的内容。谢谢我修改了相关代码以反映您的建议。现在,它根据它是否为有效电子邮件返回true或false。但是如果返回值为false,它不应该突出显示或删除条目小部件中的文本吗?它没有这样的效果。谢谢你得到了它-需要定义'invcmd'来处理Falsereturn@QuakiGabbar:是的,如果无效,您可能需要做一些额外的工作,例如将焦点强制返回到条目小部件、显示错误消息等。