软件测试|超好用超简单的Python GUI库——tkinter(五)

本文介绍了Tkinter库中Entry控件的输入验证功能,包括validate参数(如focusout)和validatecommand属性,用于定制验证规则。通过示例展示了如何设置验证函数以检查用户输入,如确保输入特定内容。此外,提到了Spinbox控件作为Entry的扩展,支持范围选择和微调操作。
部署运行你感兴趣的模型镜像

前言

我们之前介绍了tkinter库的Entry控件的输入功能,本文我们将介绍输入控件的输入验证功能。

很多时候,我们的输入框都会对输入的内容进行验证,比如用户名不能含有汉字以及特殊符号,密码长度不能低于6位等,都是对于输入框的验证。tkinter也可以实现这个功能,下面我们介绍tkinter实现验证功能。

Entry控件验证功能

Entry 控件也提供了对输入内容的验证功能,比如要求输入英文字母,你却输入了数字,这就属于非法输入,Entry 控件通过以下参数实现对内容的校验:

参数说明
validate指定验证方式,字符串参数,参数值有 focus、focusin、focusout、key、all、none。
validatecommand指定用户自定义的验证函数,该函数只能返回 True 或者 Fasle
invalidcommand当 validatecommand 指定的验证函数返回 False 时,可以使用该参数值再指定一个验证函数。

下面是 validate 的常用参数值:

参数值说明
focus当 Entry 组件获得或失去焦点的时候验证
focusin当 Entry 组件获得焦点的时候验证
focuson当 Entry 组件失去焦点的时候验证
key当输入框被编辑的时候验证
all当出现上边任何一种情况的时候验证
none默认不启用验证功能,需要注意的是这里是字符串的 ‘none’

使用示例如下:

import tkinter as tk
from tkinter import messagebox
win = tk.Tk()
# 设置主窗口
win.geometry('250x200+250+200')
win.title("拜仁慕尼黑")

win.resizable(0,0)
# 创建验证函数
def check():
    if entry1.get() == "托马斯穆勒":
        messagebox.showinfo("输入正确")
        return True
    else:
        messagebox.showwarning("输入不正确")
        entry1.delete(0,tk.END)
        return False
# 新建文本标签
labe1 = tk.Label(win,text="账号:")
labe2 = tk.Label(win,text="密码:")
labe1.grid(row=0)
labe2.grid(row=1)
# 创建动字符串
Dy_String = tk.StringVar()
# 使用验证参数 validata,参数值为 focusout 当失去焦点的时候,验证输入框内容是否正确
entry1 = tk.Entry(win,textvariable =Dy_String,validate ="focusout",validatecommand=check)
entry2 = tk.Entry(win)
# 对控件进行布局管理,放在文本标签的后面
entry1.grid(row=0, column=1)
entry2.grid(row=1, column=1)
win.mainloop()

运行代码,生成界面如下:

在这里插入图片描述

在这里插入图片描述

Tkinter 还为验证函数提供可一些额外的选项,不过想要使用这些额外选项,需要提前使用 register() 方法对验证函数进行注册,如下所示:

选项说明
%d有 3 个参数值,其中 0 表示删除操作;1 表示插入操作;2 表示获得、失去焦点或 textvariable 变量的值被修改导
%i当用户进行插入或者删除操作的时,该选项不爱哦是插入或者删除的索引位置,若是其他的情况则选项值为 -1
%P该选项值指定了输入框内的文本内容,只有当输入框的值允许改变的时候,该选项值才会生效。
%s改值为调用验证函数钱输入框内的文本内容
%S该选项值,只有插入或者删除操作触发验证函数的时候才会生效,它表示了被删除或者插入的内容
%v表示当前 Entry 控件的 validate 参数的值
%V表示触发验证函数的原因,值为 focus、focusin 、focusout、all、key… 中的一个。
%W该选项表示控件类型,即控件的名字(Entry)

示例如下:

import tkinter as tk
from tkinter import messagebox
win = tk.Tk()
# 设置主窗口
win.geometry('250x200+250+200')
win.title("拜仁慕尼黑")
win.resizable(0,0)
# 新建文本标签
labe1 = tk.Label(win,text="账号:")
labe2 = tk.Label(win,text="密码:")
labe1.grid(row=0)
labe2.grid(row=1)
# 创建动字符串
Dy_String = tk.StringVar()
# 创建验证函数
def check(strings,reason, id):
    if entry1.get() == "托马斯穆勒":
        messagebox.showinfo("输入正确")
        print(strings,reason,id)
        return True
    else:
        messagebox.showwarning("输入不正确")
        print(strings,reason,id)
        return False
# 对验证函数进行注册
CheckTest = win.register(check)
# 使用验证参数 validata,参数值为 focusout 当失去焦点的时验证输入框内容是否正确
entry1 = tk.Entry(win,textvariable =Dy_String,validate ="focusout",validatecommand=(CheckTest,'%P','%V','%W'))
entry2 = tk.Entry(win)
# 对控件进行布局管理,放在文本标签的后面
entry1.grid(row=0, column=1)
entry2.grid(row=1, column=1)
win.mainloop()

----------------------
输出结果如下:
托马斯穆勒 focusout .!entry
穆勒 focusout .!entry

运行代码,生成界面如下:

在这里插入图片描述

实例演示

我们以一个简单的计算器为例

from tkinter import *
# 创建窗体
win = Tk()
win.title("计算器")
win.geometry('300x300')

# 创建一个容器来包括其他控件
frame = Frame (win)
# 创建一个计算器
def calc() :
# 用户输入的表达式,计算结果后转换为字符串
    result = "= "+ str (eval(expression.get()))
    #将计算的结果显示在Label控件上
    label.config(text =result)
#创建一个Label控件
label = Label (frame)
#创建一个Entry控件
entry = Entry (frame)
#读取用户输入的表达式
expression = StringVar ()
#将用户输入的表达式显示在Entry控件上
entry ["textvariable"] = expression
#创建-一个 Button控件.当用户输入完毕后,单击此按钮即计算表达式的结果
button1 = Button (frame, text="等 于",command=calc)
#设置Entry控件为焦点所在
entry.focus ()
frame.pack ()
#Entry控件位于窗体的上方
entry .pack()
#Label控件位于窗体的左方
label .pack (side="left")
#Button控件位于窗体的右方
button1.pack (side="right")
#开始程序循环
frame .mainloop()

运行代码,生成界面如下:

在这里插入图片描述

Spinbox 高级输入框

Spinbox 是 Entry 控件的升级版,它是 Tkinter 8.4 版本后新增的控件,该控件不仅允许用户直接输入内容,还支持用户使用微调选择器(即上下按钮调节器)来输入内容。在一般情况下,Spinbox 控件用于在固定的范围内选取一个值的时候使用。下面看一组简单的应用示例:

import tkinter as tk
root = tk.Tk()
root.title("拜仁慕尼黑")
root.geometry('300x200+300+300')

# 如果是数字使用 from_和to参数,范围 0-20,并且与2步长递增或递减
w = tk.Spinbox(root,from_=0,to=20, increment=2,width = 15,bg='#9BCD9B')
w.pack()
# 显示窗口
root.mainloop()

字符串当然也是可以的,示例如下:

import tkinter as tk
root = tk.Tk()
root.title("拜仁慕尼黑")
root.geometry('300x200+300+300')

# 使用 values 参数以元组的形式进行传参
strings = tk.Spinbox(root,values=('穆勒','基米希','格雷茨卡','穆夏拉', '德里赫特'))
strings.pack()
# 开启事件循环
root.mainloop()

运行代码,生成的界面如下:

在这里插入图片描述

总结

本文主要总结了tkinter Emtry控件的输入验证以及高级输入框的操作,后续我们将继续介绍tkinter的text文本框组件。

更多技术文章

您可能感兴趣的与本文相关的镜像

Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值