python 之Entry

# Tkinter教程之Entry篇  
# Entry用來輸入單行文本 
from tkinter import *  
  
root = Tk()  
# 建立entry  
Entry(root, text='input your text here').pack()  
# 上面的代碼目的是建立一個Entry對象,並在Entry上顯示'input your text here',運行此代碼,並無看到文本的顯示,  
# 由此可知與Lable和Button不一樣,Entry的text屬性不能夠設置Entry的文本  
  
'''''2.在Entry中設定初始值,使用textvariable將變量與Entry綁定'''  
e = StringVar()  
entry = Entry(root, textvariable=e).pack()  
e.set('input your text here')  
  
'''''3.設置爲只讀Entry. 
Entry的另外一個比較有用的屬性,設置爲只讀,不容許用戶對它的值改變。 
設置state屬性爲'readonly' 
'''  
e2 = StringVar()  
entry = Entry(root, textvariable=e2)  
e2.set('not modify')  
entry.pack()  
entry['state'] = 'readonly'  
# 實際上Entry的屬性值可使用的也爲normal/active/disabled,'readonly'與disabled同樣  
root.mainloop() 
[python] view plain copy

 
'''''4.設置爲密碼輸入框 
#將Entry做爲一個密碼輸入框來使用,即不顯示用戶輸入的內容值,用特定符號代替。使用用屬性 
show來指定。 
'''  
from tkinter import *  
  
root = Tk()  
e = StringVar()  
entry = Entry(root, textvariable=e)  
e.set('input your text here')  
entry.pack()  
# 使用*來顯示輸入的內容,若是喜歡能夠改成其它字符  
entry['show'] = '*'  
# 分別使用*#$顯示輸入的文本內容  
for mask in ['*', '#', '$']:  
    e = StringVar()  
    entry = Entry(root, textvariable=e)  
    e.set('password')  
    entry.pack()  
    entry['show'] = mask  
  
root.mainloop() 
[python] view plain copy

 
'''''5.驗證輸入的內容是否符合要求。 
Entry 組件是支持驗證輸入內容的合法性的,好比要求輸入數字,你輸入了字母那就是非法。 
實現該功能,須要經過設置 validate、validatecommand 和 invalidcommand 選項。 
 
首先啓用驗證的「開關」是 validate 選項,該選項能夠設置的值有: 
focus:當 Entry 組件得到或失去焦點的時候驗證 
focusin: 當 Entry 組件得到焦點的時候驗證 
focusout: 當 Entry 組件失去焦點的時候驗證 
key:當輸入框被編輯的時候驗證 
all: 當出現上邊任何一種狀況的時候驗證 
 
其次是爲 validatecommand 選項指定一個驗證函數,該函數只能返回 True 或 False 表示驗證的結果。 
通常狀況下驗證函數只須要知道輸入框的內容便可,能夠經過 Entry 組件的 get() 方法得到該字符串。 
 
而後,invalidcommand 選項指定的函數只有在 validatecommand 的返回值爲 False 的時候才被調用。 
'''  
from tkinter import *  
  
root = Tk()  
e = StringVar()  
  
  
def validateText():  
    val = entry.get()  
    if val == '654321':  
        print("正確!")  
        return True  
    else:  
        ''''' 
        刪除內容,-- 刪除參數 first 到 last 範圍內(包含 first 和 last)的全部內容 
        -- 若是忽略 last 參數,表示刪除 first 參數指定的選項 
        -- 使用 delete(0, END) 實現刪除輸入框的全部內容 
       '''  
        entry.delete(0, END)  
        return False  
  
  
def test():  
    print('invalidcommand:我被調用了')  
    return True  
  
entry = Entry(root, textvariable=e, validate='focusout', validatecommand=validateText,invalidcommand=test)  
entry.pack()  
Entry(root, text='sure').pack()  
root.mainloop()  
# 還有其餘的屬性fg/bg/relief/width/height/justify/state使用方法與Button相同,再也不舉例。 
[python] view plain copy

 
''''' 
最後,其實 Tkinter 還有隱藏技能,不過須要冷卻纔能觸發,請聽小甲魚一一道來...... 
Tkinter 爲驗證函數提供一些額外的選項: 
額外選項    含義 
'%d'    操做代碼:0 表示刪除操做;1 表示插入操做;2 表示得到、失去焦點或 textvariable 變量的值被修改 
'%i'    1. 當用戶嘗試插入或刪除操做的時候,該選線表示插入或刪除的位置(索引號) 
        2. 若是是因爲得到、失去焦點或 textvariable 變量的值被修改而調用驗證函數,那麼該值是 -1 
'%P'    1. 當輸入框的值容許改變的時候,該值有效 
        2. 該值爲輸入框的最新文本內容 
'%s'    該值爲調用驗證函數前輸入框的文本內容 
'%S'    1. 當插入或刪除操做觸發驗證函數的時候,該值有效 
        2. 該選項表示文本被插入和刪除的內容 
'%v'    該組件當前的 validate 選項的值 
'%V'    1. 調用驗證函數的緣由 
        2. 該值是 'focusin','focusout','key' 或 'forced'(textvariable 選項指定的變量值被修改)中的一個 
'%W'    該組件的名字 
 
爲了使用這些選項,你能夠這樣寫:validatecommand=(f, s1, s2, ...) 
 
其中,f 就是你「冷卻後」的驗證函數名,s一、s二、s3 這些是額外的選項,這些選項會做爲參數依次傳給 f 函數。 
咱們剛剛說了,使用隱藏技能前須要冷卻,其實就是調用 register() 方法將驗證函數包裝起來: 
'''  
from tkinter import *  
  
master = Tk()  
  
v = StringVar()  
  
  
def test(content, reason, name):  
    if content == "小甲魚":  
        print("正確!")  
        print(content, reason, name)  
        return True  
    else:  
        print("錯誤!")  
        print(content, reason, name)  
        return False  
  
  
testCMD = master.register(test)  
e1 = Entry(master, textvariable=v, validate="focusout", validatecommand=(testCMD, '%P', '%v', '%W'))  
e2 = Entry(master)  
e1.pack(padx=10, pady=10)  
e2.pack(padx=10, pady=10)  
  
mainloop() 
相關文章
相關標籤/搜索