Python tkinter Entry 限制輸入數字

本篇 ShengYu 介紹 Python tkinter Entry 限制輸入數字的方法。

tkinter Entry 限制只能輸入數字

這邊就已簡單的數學問題回答為例,需要限制使用者只能在 Entry 裡輸入數字,
tkinter Entry 限制輸入數字的方式要在 tk.Entry() 帶入 validatecommand 驗證文字的函式,也就是下例中的 validate(),驗證函式名稱可以自己改名,在這個驗證函式裡你可以客製化一些規則,例如本例中的限制使用者只能輸入數字,在 validate() 裡回傳 True 的話會讓這次的文字驗證通過,反之 False 就不會讓這次的文字通過,通過的文字才會顯示在 Entry 上,詳細用法如下,

python3-entry-number-only.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
29
30
31
32
33
34
35
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import tkinter as tk
from tkinter import messagebox

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

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='1+1=')
mylabel.grid(row=0, column=0)

vcmd = (root.register(validate), '%P')
myentry = tk.Entry(root, validate='key', validatecommand=vcmd)
myentry.grid(row=0, column=1)

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

root.mainloop()

結果圖如下,實際操作可以發現只能輸入數字,無法輸入數字以外的文字,這是因為我們在 validate() 驗證函式裡加上 str.isdigit() 來判斷輸入文字是否為數字,是數字才回傳 True,

參數說明

以下為 tk.Tk().register() 的參數說明,
%d:Type of action (1 for insert, 0 for delete, -1 for focus, forced or textvariable validation)
%i:index of char string to be inserted/deleted, or -1
%P:value of the entry if the edit is allowed
%s:value of entry prior to editing
%S:the text string being inserted or deleted, if any
%v:the type of validation that is currently set
%V:the type of validation that triggered the callback (key, focusin, focusout, forced)
%W:the tk name of the widget
這邊我們只使用 %P 參數,其它參數就不在此篇介紹,有興趣的人可以去試試其它參數的功用。

其它參考
python - Restricting the value in Tkinter Entry widget - Stack Overflow
https://stackoverflow.com/questions/8959815/restricting-the-value-in-tkinter-entry-widget
python - Interactively validating Entry widget content in tkinter - Stack Overflow
https://stackoverflow.com/questions/4140437/interactively-validating-entry-widget-content-in-tkinter/
entry manual page - Tk Built-In Commands
http://tcl.tk/man/tcl8.6/TkCmd/entry.htm#M16

其它相關文章推薦
Python tkinter Entry 文字框用法與範例
Python 新手入門教學懶人包
Python tkinter 新手入門教學