Tkinter Focusout Entry Validation

时间:2013-08-26 19:24:10

标签: python validation tkinter

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

有关如何验证电子邮件输入的任何想法吗?

1 个答案:

答案 0 :(得分:1)

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

您应该使用%P代替整个字符串。

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

之类的内容