# 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()