2015-09-10 57 views
1

当我试图进入的东西,它只是将无效块,没有让我输入密钥。我明白了,我可以通过使用其他选项“焦点”摆脱它,“事件的内容”等,但我想它与主要工作:输入验证与Tkinter的

from tkinter import * 
import re 

def validate_email(P): 
    # master.errormsg.config(text='') 
    x = re.match(r"[^@][email protected][^@]+\.[^@]+", 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() 
+0

哎呀!与验证=键改变代码....我指的“钥匙” –

回答

0

我是初学者自己,但在运行你的代码,调试它看起来当您使用“钥匙”,输入字段被抓住,你正在按键盘上的键的值。你的两个职能正在评估价值,并且每次都失败,因为它不是一个粗糙的电子邮件地址。

如果您在控制台中,您可以看到该打印(P)是打印出你碰巧当时被压着哪个键。

+1

关闭,但并不完全。如果编辑(被按下的键)被允许,'P'将成为条目的值。它恰好如此,因为每个键都被拒绝了,P总是一个字符。在稍有不同的情况下,'P'可能是一个很长的字符串(例如,如果条目指定编辑前的默认值是允许的)。 –