我在这里看到了几个关于tkinter条目验证的问题,但每个问题似乎都坚持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()
有关如何验证电子邮件输入的任何想法吗?
答案 0 :(得分:1)
%S
表示要插入的字符串(如果有)。这仅对文本插入验证有意义。当窗口小部件失去焦点时,不会插入任何字符,因此该参数将始终为空字符串。由于它是一个空字符串,因此总是无法验证。
您应该使用%P
代替整个字符串。
另外,严格来说,验证函数应该返回一个布尔值而不是一个对象。您应该将匹配结果保存在变量中,然后返回return (match is not None)