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