Python tkinter Entry 文字輸入框用法與範例

本篇 ShengYu 介紹 Python tkinter Entry 文字輸入框用法與範例,Python GUI 程式設計裡文字輸入框的處理是很基本且常用的功能,接下來就來學習怎麼用 tkinter 建立 Entry 吧!

以下的 Python tkinter Entry 用法與範例將分為這幾部分,

  • tkinter Entry 基本用法
  • tkinter Entry 基本參數
  • tkinter 取得 Entry 的輸入文字
  • tkinter Entry 限制輸入框只能輸入數字
  • tkinter Entry 使用 show='*' 隱藏輸入密碼

tkinter Entry 基本用法

這邊示範 tkinter Entry 基本用法,tk.Entry() 初始化完以後,用 grid() 來設定排版,Label 在左邊(0,0),Entry 在右邊(0,1) ,之後就進入 mainloop(),就可以完成初步的 tkinter Entry 體驗囉!範例如下,

python3-entry.py
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import tkinter as tk

root = tk.Tk()
root.title('my window')

mylabel = tk.Label(root, text='Name:')
mylabel.grid(row=0, column=0)
myentry = tk.Entry(root)
myentry.grid(row=0, column=1)

root.mainloop()

結果圖如下,

tkinter Entry 基本參數

這邊是 tkinter 的 tk.Entry() 的參數說明,有需要客製化 Entry 的一些變動的話,例如:設定Entry 的背景顏色或者設定 Entry 的邊框寬度,可以參考下面的參數,

bgbackground:文字框的背景顏色,預設是 light gray
bdbordwith:文字框的邊框寬度,預設是 2px
cursor:滑鼠游標的外型,例如:arrow、circle、cross 與 plus 等等
fgforeground:字型顏色,預設是黑色
font:字型
highlightbackground:沒有 focus 文字框時的邊框顏色
highlightcolor:focus 文字框時的邊框顏色
highlightthickness:focus 文字框時的邊框寬度
justify:文字對齊方式,選項有 tk.LEFT、tk.RIGHT 或 tk.CENTER,預設是 tk.LEFT
relief:邊框3D陰影效果,tk.FLAT、tk.GROOVE、tk.RAISED、tk.RIDGE、tk.SOLID 或 tk.SUNKEN,預設為 tk.SUNKEN
selectbackground:選取文字時的背景顏色
selectborderwidth:選取文字時的邊框寬度,預設是 1px
selectforeground:選取文字時的顏色
show:顯示輸入的字元,例如用在密碼欄位時可以使用 show='*' 來顯示星號
state:文字框的狀態,state=tk.NORMAL 是允許輸入,state=tk.DISABLED 是無法輸入,預設是 state=tk.NORMAL
takefocus:預設接受 tab 鍵的 foucs,設成 0 則是不接收
textvariable:文字變數,需要傳入類型為 StringVar 的變數
validate:設定文字框的文字驗證選項
validatecommand:設定文字驗證 callback function
width:文字框的寬度,單位是字元寬度
xscrollcommand:設定水平捲動軸,適用於文字框的內容寬度大於文字框的寬度時使用

tkinter 取得 Entry 的輸入文字

tkinter 取得 Entry 的輸入文字可以用 tk.Entry.get() 的方式,如下例子中的 myentry.get(),這邊示範按下按鈕時將 Entry 裡的文字取出來後,並且設定成 mybutton 顯示的文字,

python3-entry2.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import tkinter as tk

def button_event():
#print(myentry.get())
if myentry.get() != '':
mybutton['text'] = myentry.get()

root = tk.Tk()
root.title('my window')
root.geometry('200x150')

myentry = tk.Entry(root)
myentry.pack()

mybutton = tk.Button(root, text='button', command=button_event)
mybutton.pack()

root.mainloop()

輸入文字且按下按鈕的結果圖如下,

這邊改用另一個例子,我們寫一個簡單的數學問題,讓使用者來回答,
取得 Entry 的輸入文字還有另一種方式,你可以宣告一個 tk.StringVar 變數 var,將 var 與 tk.Entry 綁訂,之後就可以用 var.get() 的方式來取得 Entry 的輸入文字,這次我們把它顯示在 messagebox 上,

python3-entry3.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import tkinter as tk
from tkinter import messagebox

def button_event():
#print(var.get())
if var.get() == '':
tk.messagebox.showerror('message', '未輸入答案')
elif var.get() == '2':
tk.messagebox.showinfo('message', '答對了!')
else:
tk.messagebox.showerror('message', '答錯')

root = tk.Tk()
root.title('my window')

mylabel = tk.Label(root, text='1+1=')
mylabel.grid(row=0, column=0)

var = tk.StringVar()
myentry = tk.Entry(root, textvariable=var)
myentry.grid(row=0, column=1)

mybutton = tk.Button(root, text='完成', command=button_event)
mybutton.grid(row=1, column=1)

root.mainloop()

結果圖如下,

關於 tk.messagebox 的詳細用法可以看這篇介紹。

tkinter Entry 限制輸入框只能輸入數字

這邊介紹蠻常使用到的功能,就是限制使用者只能在 Entry 輸入框裡輸入數字,需要在 tk.Tk().register() 註冊一個驗證的函式,在這個驗證函式裡你可以客製化一些規則,例如本例中的限制使用者只能輸入數字,大概的用法如下,

python3-entry4.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import tkinter as tk

def validate(P):
#print(P)
if str.isdigit(P) or P == '':
return True
else:
return False

root = tk.Tk()
root.title('my window')

mylabel = tk.Label(root, text='input:')
mylabel.pack(side=tk.LEFT)

vcmd = (root.register(validate), '%P')
myentry = tk.Entry(root, validate='key', validatecommand=vcmd)
myentry.pack(side=tk.LEFT)

root.mainloop()

結果圖如下,

詳細內容可以看我之前寫的 tkinter Entry 限制輸入數字這篇介紹。

tkinter Entry 使用 show='*' 隱藏輸入密碼

這邊示範一個登入視窗,裡面有兩個 Entry,分別是要讓使用者輸入使用者名稱與密碼,我們希望使用者輸入的密碼不要用明碼顯示出來,取而代之的是用 * 星號來顯示,那要怎麼作呢?就是在 tk.Entry() 初始化時設定 show='*' 參數,這樣輸入時就會顯示 * 星號而不會顯示明碼了,範例如下,

python3-entry5.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import tkinter as tk

root = tk.Tk()
root.title('my window')

mylabel = tk.Label(root, text='Name:')
mylabel.grid(row=0, column=0)
myentry = tk.Entry(root)
myentry.grid(row=0, column=1)

mylabel2 = tk.Label(root, text='Password:')
mylabel2.grid(row=1, column=0)
myentry2 = tk.Entry(root, show='*')
myentry2.grid(row=1, column=1)

mybutton = tk.Button(root, text='Login')
mybutton.grid(row=2, column=1)

root.mainloop()

結果圖如下,

以上就是 Python tkinter Entry 文字輸入框用法與範例介紹,
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!

其它相關文章推薦
Python tkinter 標籤用法與範例
Python tkinter 按鈕用法與範例
Python 新手入門教學懶人包
Python tkinter 新手入門教學