Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Tkinter聚焦输出输入验证_Python_Validation_Tkinter - Fatal编程技术网

Python 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

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

关于如何验证电子邮件条目,您有什么想法吗?

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

您应该使用表示整个字符串的
%p


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

的内容。谢谢我修改了相关代码以反映您的建议。现在,它根据它是否为有效电子邮件返回true或false。但是如果返回值为false,它不应该突出显示或删除条目小部件中的文本吗?它没有这样的效果。谢谢你得到了它-需要定义'invcmd'来处理Falsereturn@QuakiGabbar:是的,如果无效,您可能需要做一些额外的工作,例如将焦点强制返回到条目小部件、显示错误消息等。