Python 使用tkinter进行条目验证

Python 使用tkinter进行条目验证,python,validation,tkinter,Python,Validation,Tkinter,当我试图输入某个内容时,它将进入无效块,不允许我输入任何键。我明白,我可以通过使用其他选项“聚焦”、“聚焦输出”等来消除它。但我希望它与键一起工作: from tkinter import * import re def validate_email(P): # master.errormsg.config(text='') x = re.match(r"[^@]+@[^@]+\.[^@]+", P) print(P) errormsg.config(text='')

当我试图输入某个内容时,它将进入无效块,不允许我输入任何键。我明白,我可以通过使用其他选项“聚焦”、“聚焦输出”等来消除它。但我希望它与键一起工作:

from tkinter import *
import re

def validate_email(P):
   # master.errormsg.config(text='')
   x = re.match(r"[^@]+@[^@]+\.[^@]+", P)
   print(P)
   errormsg.config(text='')
   emailentry.focus_set()
   return x != None


def invalid_email(P):
    errormsg.config(text='Invalid Email Address')
    emailentry.focus_set()

if __name__ == '__main__':
    master = Tk()
    errormsg = Label(master,text='', fg='red')
    errormsg.pack()
    L1 = Label(master, text='Enter Email Address')
    L1.pack(side=LEFT)
    vcmd = (master.register(validate_email), '%P')
    invcmd = (master.register(invalid_email), '%P')
    emailentry = Entry(master, validate="focusout", validatecommand=vcmd,  
    invalidcommand=invcmd)
    emailentry.pack()
    Button(master, text="Login").pack()
    master.mainloop()

我自己也是一个初学者,但在运行代码和调试时,当您使用“键”时,输入字段会获取您当前在键盘上按下的键的值。您的两个函数正在评估值,但每次都会失败,因为它不是电子邮件地址


如果您在控制台中查看,您可以看到打印(p)正在打印您当时按下的任何键

我自己也是一个初学者,但在运行代码和调试时,当您使用“键”时,输入字段会获取您当前在键盘上按下的键的值。您的两个函数正在评估值,但每次都会失败,因为它不是电子邮件地址


如果您在控制台中查看,您可以看到打印(p)正在打印您当时按下的任何键

哎呀!!使用validate=key更改代码…我指的是“key”oops!!用validate=key更改代码……我指的是“key”关闭,但不是完全关闭<如果允许编辑(按键),则代码>P将是条目的值。由于每个键都被拒绝,所以P总是一个字符。在稍有不同的情况下,
P
可能是一个长字符串(例如,如果在允许编辑之前为条目指定了默认值)。请关闭,但不能完全关闭<如果允许编辑(按键),则代码>P将是条目的值。由于每个键都被拒绝,所以P总是一个字符。在稍有不同的情况下,
P
可能是一个长字符串(例如,如果在允许编辑之前为条目指定了默认值)。