1

我在这里看到了几个关于 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()

关于如何验证电子邮件条目的任何想法?

4

1 回答 1

2

%S表示要插入的字符串,如果有的话。这仅对文本插入的验证有意义。当小部件失去焦点时,不会插入任何字符,因此此参数将始终为空字符串。由于它是一个空字符串,因此您的验证将始终失败。

您应该改用%P它,它代表整个字符串。

此外,严格来说,验证函数应该返回一个布尔值而不是一个对象。您应该将匹配结果保存在变量中,然后返回类似return (match is not None)

于 2013-08-26T19:57:15.117 回答