2015-09-10 72 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'可能是一個很長的字符串(例如,如果條目指定編輯前的默認值是允許的)。 –