Label標籤元件僅能在視窗上顯示資料,卻無法做輸入資料或修改資料的動作。若使用者需要對視窗上的資料做輸入或修改的動作,此時就必須使用Entry文字方塊元件來完成。所以「文字方塊」元件是允許輸入、修改和顯示資料,也就是說它具有讀寫功能,而標籤元件只具有唯讀功能。建立文字方塊的語法如下:
物件變數 = tkinter.Entry(容器物件, [參數1=值1, 參數2=值2, …, 參數n=值n])Entry可使用Label提供的參數,下表是Entry所提供常用的參數說明:
| 參數 | 說明 |
|---|---|
| state | 文字方塊狀態,預設值為 normal,表示文字方塊為輸入狀態。 若設為 disabled 表示文字方塊為不啟用狀態。 若設為 readonly 表示文字方塊為唯讀狀態。 |
| textvariable | 文字方塊代表的物件,用來存取文字方塊中的資料。使用時必須先透過 tkinter 模組的 IntVar()、DoubleVar()、StringVar()、BooleanVar()等方法,定義文字方塊代表物件要使用的資料型別。 ①num=tkinter.IntVar():定義 num 為 tkinter 模組的整數物件。 ②score=tkinter.DoubleVar():定義 score 為 tkinter 模組的浮點數物件。 ③name=tkinter.StringVar():定義 name 為 tkinter 模組的字串物件。 ④isMarry=tkinter.BooleanVar():定義 isMarry 為 tkinter 模組的布林物件。 在文字方塊指定對應的物件撰寫方式如下: #指定 tkinter 模組的字串物件 name,是 txtName 文字欄的變數 name=tk.StringVar()txtName = tkinter.Entry(win, textvariable=name)# 指定 tkinter 模組的整數物件 score,是 txtScore 文字欄的變數 score = tk.IntVar()txtScore = tkinter.Entry(win, textvariable=score)當文字方塊對應的物件指定完成,接著可以使用 get()方法來取得資料,或使用 set()方法來設定資料。寫法如下: vName = name.get() # 取得 name 對應文字方塊的資料並放入 vNamescore.set(100) #設定 score 對應文字方塊的資料為 100 |
[簡例] (檔名:Entry01.py)
建立判斷成績等級的視窗程式,視窗中使用文字方塊讓使用者輸入姓名和分
數,按下[確定]鈕後,在標籤上顯示該位使用者姓名與成績等級,成績等級分類
如下:
90~100: A80~89: B70~79: C65~69: D0~64: F
[結果]

程式碼:
Entry01.pyimport tkinter as tk #定義fnOk函式,當按下確定鈕會執行此函式 def fnOk(): vName = name.get() vScore=score.get() if vScore>=90 : level = 'A' elif vScore>=80 : level = 'B' elif vScore>=70 : level = 'C' elif vScore>=65 : level = 'D' else : level = 'F' lblResult['text'] = '{0}成績是{1},等級是{2}'.format(vName, vScore , level) win = tk.Tk() win.title('按鈕範例') win.geometry('180x120') # 指定tkinter模組的字串物件name,是txtName文字欄的變數 name=tk.StringVar() # 指定tkinter模組的整數物件score,是txtScore文字欄的變數 score = tk.IntVar() # 建立lblName標籤 lblName = tk.Label(win, text='姓名', padx=10, pady=8) lblName.grid(row=0, column=0) # 建立txtName文字欄,此文字欄代表變數為name txtName = tk.Entry(win, width=15, textvariable=name) txtName.grid(row=0, column=1) # 建立lblScore標籤 lblScore = tk.Label(win, text='分數', padx=10, pady=8) lblScore.grid(row=1, column=0) # 建立txtScore文字欄,此文字欄代表變數為score txtScore = tk.Entry(win, width=15, textvariable=score) txtScore.grid(row=1, column=1) # 建立btnOk按鈕,按下此鈕會執行fnOk函式 btnOk = tk.Button(win, text='確定', command=fnOk ) btnOk.grid(row=2, column=0) # 建立lblResult標籤 lblResult = tk.Label(win, text='', padx=10, pady=8) lblResult.grid(row=2, column=1) win.mainloop()
相關主題與延伸閱讀
- 0. 章節索引:本章全部筆記的學習地圖與快速查找。
- 1. tkinter 套件:
tkinter套件的整體介紹與元件總覽。 - 2. Label 標籤元件:本篇範例中用來標示欄位名稱與顯示結果的搭配元件。
- 4. Button 按鈕元件:按下確定鈕才會讀取文字方塊資料並執行判斷邏輯。
- 6. messagebox 對話方塊元件:
Entry01.py範例後續延伸為messagebox01.py,加入對話方塊詢問流程。 - 4. 選擇結構:成績等級判斷即以
if/elif/else選擇結構實作。