編程應用、實戰教程,不容錯過
一、創建一個文本輸入部件
上一篇文章中,我們介紹了Tkinter中按鈕小部件Button()的使用。除了按鈕小部件之外,單行文本輸入小部件也是圖形界面程序中使用較多的小部件,今天,我們就來學習一下Tkinter單行文本輸入小部件的使用。
在Tkinter中,單行文本輸入通過實例化一個Entry()類來實現,和Button()按鈕一樣,它也需要調用pack()方法進行打包:
# 州的先生 http://zmister.com
import tkinter as tk
class EntryApp(tk.Tk):
? ?def __init__(self):
? ? ? ?super().__init__()
? ? ? ?self.entry = tk.Entry()
? ? ? ?self.entry.pack()
if __name__ == "__main__":
? ?app = EntryApp()
? ?app.mainloop()
運行上述代碼,我們將會得到一個含有簡單的單行文本輸入框的圖形界面程序。如下圖所示:
二、組合按鈕和文本輸入
結合我們上一篇使用到的Button()按鈕小部件,我們來創建一個組合了按鈕和輸入框的圖像界面程序:
# coding:utf-8
# 州的先生 http://zmister.com
import tkinter as tk
class EntryApp(tk.Tk):
? ?def __init__(self):
? ? ? ?super().__init__()
? ? ? ?self.wm_title('州的先生Tkinter教程')
? ? ? ?self.entry1 = tk.Entry()
? ? ? ?self.entry2 = tk.Entry()
? ? ? ?self.btn1 = tk.Button(text='提交')
? ? ? ?self.btn2 = tk.Button(text='重置')
? ? ? ?self.entry1.pack()
? ? ? ?self.entry2.pack()
? ? ? ?self.btn1.pack()
? ? ? ?self.btn2.pack()
if __name__ == '__main__':
? ?app = EntryApp()
? ?app.mainloop()
在這里,我們創建了兩個文本輸入框和兩個按鈕,運行代碼,我們會得到如下圖所示的圖像界面程序:
隱藏文本輸入信息
看到上面的圖像界面,大家肯定可以猜到我們這是在創建一個登陸窗口的圖像界面,第一個文本輸入框為用戶名輸入框,第二個文本輸入框問密碼輸入框。既然有密碼輸入框,自然在輸入的時候不能完全將密碼顯示出來,一般情況下,都是使用星號*來代替真實的輸入值。在Tkinter中,我們通過Entry()類的show屬性選項來設置文本輸入框顯示出來的值:
tk.Entry(show='*')
這樣,在這個文本輸入框中輸入的內容都會顯示為*,我們將上面的代碼修改一下,加入隱藏文本信息的設置:
# coding:utf-8
# 州的先生 http://zmister.com
import tkinter as tk
class EntryApp(tk.Tk):
? ?def __init__(self):
? ? ? ?super().__init__()
? ? ? ?self.wm_title('州的先生Tkinter教程')
? ? ? ?self.entry1 = tk.Entry()
? ? ? ?self.entry2 = tk.Entry(show='*')
? ? ? ?self.btn1 = tk.Button(text='提交')
? ? ? ?self.btn2 = tk.Button(text='重置')
? ? ? ?self.entry1.pack()
? ? ? ?self.entry2.pack()
? ? ? ?self.btn1.pack()
? ? ? ?self.btn2.pack()
if __name__ == '__main__':
? ?app = EntryApp()
? ?app.mainloop()
運行上述代碼,在生成的圖像界面程序中第二個文本輸入框的內容顯示的將永遠都是星號*,如下圖所示:
獲取文本輸入框的值
我們在Entry()文本輸入框中輸入內容之后,如果需要對輸入的內容進行利用、驗證或判斷,那么則必須需要獲取到文本輸入框中的值,那么如何在圖像界面中獲取到這些值呢?
使用實例化后的Entry()類的get()方法就可以獲取到當前文本輸入框中的值。下面我們來演示一下:
# coding:utf-8
# 獲取文本輸入框的值
# 州的先生 http://zmister.com
import tkinter as tk
class EntryApp(tk.Tk):
? ?def __init__(self):
? ? ? ?super().__init__()
? ? ? ?self.wm_title('州的先生Tkinter教程')
? ? ? ?self.entry1 = tk.Entry()
? ? ? ?self.entry2 = tk.Entry(show='*')
? ? ? ?self.btn1 = tk.Button(text='提交',command=self.get_entry_value)
? ? ? ?self.btn2 = tk.Button(text='重置')
? ? ? ?self.entry1.pack()
? ? ? ?self.entry2.pack()
? ? ? ?self.btn1.pack()
? ? ? ?self.btn2.pack()
? ?# 打印文本輸入框的值
? ?def get_entry_value(self):
? ? ? ?e1 = self.entry1.get()
? ? ? ?e2 = self.entry2.get()
? ? ? ?print("第一個輸入框值為:",e1)
? ? ? ?print("第二個輸入框的值為:",e2)
if __name__ == '__main__':
? ?app = EntryApp()
? ?app.mainloop()
在這里,我們新定義了一個()的方法()用于將文本輸入框的值打印出來,在方法中我們使用Entry()的get()方法獲取到文本輸入框的當前值,然后打印到控制臺中,最后將其綁定在按鈕btn1上。運行上述代碼,點擊“提交”按鈕,我們將在控制臺中看到兩個文本輸入框的值。如下圖所示:
控制刪除文本框的值
除了獲取文本框中的值,有時候我們在文本輸入框中輸錯了信息,還得刪除這些值,如果輸入框少,那么直接鍵刪除就可以了,但是如果有很多個輸入框,一個一個刪除就太麻煩了。這時候,我們就需要一個一鍵重置的功能,來對輸入框中的信息進行刪除。
Entry()文本輸入小部件中有一個delete()方法可供我們對其中的文本進行刪除。我們來查看一下delete()方法的源碼:
? ?def delete(self, first, last=None):
? ? ? ?"""Delete text from FIRST to LAST (not included)."""
? ? ? ?self.tk.call(self._w, 'delete', first, last)
可以發現,delete()方法接收兩個參數,first表示需要刪除文本的起始位置,last表示需要刪除文本的結束位置。基于此,我們為之前的表單添加一鍵刪除重置的功能:
# coding:utf-8
# 獲取文本輸入框的值
# 州的先生 http://zmister.com
import tkinter as tk
class EntryApp(tk.Tk):
? ?def __init__(self):
? ? ? ?super().__init__()
? ? ? ?self.wm_title('州的先生Tkinter教程')
? ? ? ?self.entry1 = tk.Entry()
? ? ? ?self.entry2 = tk.Entry(show='*')
? ? ? ?self.btn1 = tk.Button(text='提交', command=self.get_entry_value)
? ? ? ?self.btn2 = tk.Button(text='重置', command=self.clear_entry_value)
? ? ? ?self.entry1.pack()
? ? ? ?self.entry2.pack()
? ? ? ?self.btn1.pack()
? ? ? ?self.btn2.pack()
? ?# 打印文本輸入框的值
? ?def get_entry_value(self):
? ? ? ?e1 = self.entry1.get()
? ? ? ?e2 = self.entry2.get()
? ? ? ?print("第一個輸入框值為:", e1)
? ? ? ?print("第二個輸入框的值為:", e2)
? ?# 清空文本輸入框的值
? ?def clear_entry_value(self):
? ? ? ?self.entry1.delete(0,tk.END)
? ? ? ?self.entry2.delete(0,tk.END)
? ? ? ?self.entry1.focus_set() # 對第一個文本輸入框設置光標焦點
if __name__ == '__main__':
? ?app = EntryApp()
? ?app.mainloop()
運行上述代碼,可以發現,之前創建的“重置”按鈕已經可用了,當我們點擊“重置”按鈕時,兩個文本輸入框中的文本將會被清空,如下圖所示:
三、文本輸入框的更多用法在文本框中寫入值
Entry()文本輸入框小部件除了get()方法用于獲取輸入框的值,delete()方法用于刪除輸入框的值外,還有insert()方法用于在輸入框中插入值,其使用方法與delete()方法類似,下面我們來實際演示一下:
# coding:utf-8
# 獲取文本輸入框的值
# 州的先生 http://zmister.com
import tkinter as tk
class EntryApp(tk.Tk):
? ?def __init__(self):
? ? ? ?super().__init__()
? ? ? ?self.wm_title('州的先生Tkinter教程')
? ? ? ?self.entry1 = tk.Entry()
? ? ? ?self.entry2 = tk.Entry(show='*')
? ? ? ?self.btn1 = tk.Button(text='提交', command=self.get_entry_value)
? ? ? ?self.btn2 = tk.Button(text='重置', command=self.clear_entry_value)
? ? ? ?self.btn3 = tk.Button(text='默認值', command=self.insert_entry_value)
? ? ? ?self.entry1.pack()
? ? ? ?self.entry2.pack()
? ? ? ?self.btn1.pack()
? ? ? ?self.btn2.pack()
? ? ? ?self.btn3.pack()
? ?# 打印文本輸入框的值
? ?def get_entry_value(self):
? ? ? ?e1 = self.entry1.get()
? ? ? ?e2 = self.entry2.get()
? ? ? ?print("第一個輸入框值為:", e1)
? ? ? ?print("第二個輸入框的值為:", e2)
? ?# 清空文本輸入框的值
? ?def clear_entry_value(self):
? ? ? ?self.entry1.delete(0,tk.END)
? ? ? ?self.entry2.delete(0,tk.END)
? ? ? ?self.entry1.focus_set() # 對第一個文本輸入框設置光標焦點
? ?# 填入默認值
? ?def insert_entry_value(self):
? ? ? ?self.entry1.insert(0,"州的先生")
? ? ? ?self.entry2.insert(0,"zmister.com")
if __name__ == '__main__':
? ?app = EntryApp()
? ?app.mainloop()
在這里,我們新添加了一個按鈕“默認值”用于為文本輸入框填充默認值,然后新建了一個()方法用于向文本輸入框中填充值。運行上述代碼,當我們點擊“默認值”按鈕時,文本輸入框內會被填入我們預設的文本,如下圖所示:
四、最后
以上就是本篇對于Tkinter的小部件Entry()的介紹了,文章源碼已經上傳到百度網盤,點擊“閱讀原文”訪問博客文章鏈接獲取更好地閱讀體驗,如有疑問歡迎交流討論。