Python Tkinter – 验证条目小部件
Python提供了多种框架来处理 GUI 应用程序。 Tkinter 或 Tk 接口是用于构建基于 GUI 的应用程序的最广泛使用的Python接口之一。有些应用程序需要验证文本字段,以防止在提交表单之前来自用户的无效输入。 Python通过允许使用回调函数跟踪变量来允许输入验证。每当向条目小部件添加/删除输入时,都会调用此函数。一些应用程序在提交表单时验证输入,但下面的代码对键盘上的每个键进行验证。
- 导入 tkinter 模块
import tkinter
- 导入 tkinter 子模块
from tkinter import *
- 定义“回调”函数
def callback(input): if input.isdigit(): print(input) return True elif input is "": print(input) return True else: print(input) return False
解释
回调函数检查 Entry 小部件中的输入是否有效。如果条目有效,则返回 True,否则返回 False。在此示例中,检查通过键盘输入的输入是否为数字类型。如果输入是数字类型,则回调函数返回 true。对于删除操作,回调函数返回 true,因为输入是“”。然而,对于任何非数字输入,回调函数返回 false。 - 创建父窗口
root=Tk()
语法: Tk(screenName=None, baseName=None, className='Tk', useTk=1)
参数:在本例中,Tk 类在没有参数的情况下被实例化。
解释
此方法创建一个父窗口小部件,它通常是应用程序的主窗口。 - 创建条目小部件
e=Entry(root)
语法: Entry(master, **options)
范围:- master:代表父窗口(这里是根)。
- options:支持的选项有 bg、bd、command、cursor、font、exportselection、justify、relief、highlightcolor、fg、selectbackground、selectforeground、selectborderwidth、show、xscrollcommand、state、textvariable 和 width。
返回值:返回一个字符串(.!entry) 。
解释
此方法用于在父小部件(根)上创建 Entry 小部件。 - 指定 Entry 小部件在父窗口中的位置
e.place(x=50, y=50)
语法: place(x, y)
范围:- x: Entry 小部件相对于父小部件沿 X 轴的位置。
- y: Entry 小部件相对于父小部件沿 Y 轴的位置。
解释:
此方法指定 Entry 小部件在父窗口(根)中的位置。 - 注册回调函数
reg=root.register(callback)
语法:寄存器(函数)
范围:- 函数:要调用以验证 Entry 小部件中的输入的函数。
返回值:该方法返回一个可用于函数的字符串。
解释
register() 方法返回一个字符串,该字符串分配给变量“reg”,用于在后期调用回调函数。 - 调用回调函数来验证 Entry 小部件中的输入
e.config(validate="key", validatecommand=(reg, '%P'))
语法: config(validate=”key”, validatecommand=(reg, '%P'))
范围:- validate:此选项用于指定何时调用回调函数来验证输入。 “key”值指定每当任何击键(从键盘输入)更改小部件的内容时都会发生验证。
- validatecommand:该选项用于指定回调函数。该函数不是直接调用的,而是传递了一个在前面步骤中注册的变量。 '%P' 被传递来表示如果允许更改,文本将具有的值。
解释
Validate 选项支持其他值,例如 focus、focusin、focusout、all 和 none。默认值为“none”,表示不进行验证。
Validatecommand 选项支持其他值,例如 %d、%i、%s、%S、%v、%V 和 %W。可以为要传递给Python函数的每个参数添加百分比替换
Entry 小部件还支持在 validatecommand 返回 False 时调用函数的 invalidcommand 选项。
这些可以根据用户的要求使用。 - 运行应用程序
root.mainloop()
语法:mainloop()
解释
mainloop() 是一个无限循环,用于在窗口未关闭时运行应用程序。
用于验证 Entry 小部件的完整代码
import tkinter
from tkinter import *
def callback(input):
if input.isdigit():
print(input)
return True
elif input is "":
print(input)
return True
else:
print(input)
return False
root = Tk()
e = Entry(root)
e.place(x = 50, y = 50)
reg = root.register(callback)
e.config(validate ="key",
validatecommand =(reg, '% P'))
root.mainloop()
输出:(推荐全屏查看)
解释
当我们使用键盘输入数字时,回调函数返回 true,并且该值在输入小部件中是允许的。但是,在从键盘输入字母时,回调函数会返回 false,并且不允许在条目小部件中输入该值。为了更清楚地了解回调函数的工作原理,通过键盘发送的输入会打印在控制台上。可以看出,任何非数字输入都会打印在控制台上,但不允许出现在条目小部件中。在条目小部件中也允许插入和删除数字。