更多原创性能测试文章关注
十年性能测试专家&7DGroup公众号
一、普通输入框
from tkinter import *
'''
1、这个程序实现文本框输入。
2、使用grid方法按照Excel表格方式对组件位置进行安排
3、通过Button提交按钮实现获取用户的输入信息。
'''
root = Tk()
Label1 = Label(root,text='会员名称:').grid(row=0,column=0)
Label2 = Label(root,text='会员代号:').grid(row=1,column=0)
v1 = StringVar()
p1 = StringVar()
e1 = Entry(root,textvariable=v1) # Entry 是 Tkinter 用来接收字符串等输入的控件.
e2 = Entry(root,textvariable=p1,show='#')
e1.grid(row=0,column=1,padx=10,pady=5) #设置输入框显示的位置,以及长和宽属性
e2.grid(row=1,column=1,padx=10,pady=5)
def show():
print("会员名称:%s"% e1.get()) # 获取用户输入的信息
print("会员代号:%s"% e2.get())
Button(root,text='验证信息',width=10,command=show)\
.grid(row=2,column=0,sticky=W,padx=10,pady=5)
Button(root,text='退出',width=10,command=root.quit)\
.grid(row=2,column=1,sticky=E,padx=10,pady=5)
mainloop()
二、开启输入框验证
from tkinter import *
'''
开启Entry对输入文本验证功能。
1、实现该功能,需要通过设置validate、validatecommand和invalidcommand三个选项。
2、启用验证的开关是validate选项,该选项可以设置以下的值:
focus:当entry组件获得或者失去焦点的时候验证
focusin:当entry组件获得焦点的时候验证
focusout:当entry组件失去焦点的时候验证
key:当输入框被编辑的时候验证
all:当出现上面任何一种情况时候验证
none:关闭验证功能。默认设置为该选项
3、validatecommand选项指定一个验证函数,该函数只能返回True或者False表示验证结果,一般情况下验证函数只需要知道输入框中的内容即可,
可以通过Entry组件的get()方法来获得该字符串。
4、invalidcommand选项指定的函数只有在validatecommand的返回值为False的时候才被调用。
'''
'''
validatecommand选项指定一个验证函数,该函数只能返回True或者False表示验证结果
invalidcommand选项指定的函数只有在validatecommand的返回值为False的时候才被调用。
'''
root = Tk()
def text():
if e1.get() == '芝麻开门':
print('正确')
return True
else:
print('错误')
return False
def text2():
print('validatecommand的返回值为False的时候调用了我')
return False
v = StringVar()
e1 = Entry(root,textvariable=v,validate='focusout',validatecommand=text,\
invalidcommand=text2)
e2 = Entry(root)
e1.pack(padx=10,pady=10)
e2.pack(padx=10,pady=10)
mainloop()
三、为验证函数提供了一些隐藏的功能选项
from tkinter import *
'''
Tkinter 为验证函数提供了一些隐藏的功能选项。
%d:操作代码-0表示删除操作,1表示插入操作,2表示获得、失去焦点或textvariable变量值被修改
%i:1、当用户尝试插入或删除操作时候,该选项表示插入或删除的位置(索引号)
2、如果是获得、失去焦点或textvariable变量值被修改该而地啊哟用验证函数,那么该值是-1
%P: 1、当输入框的值允许改变的时候,该值有效
2、该值为输入框的最新文本内容
%s: 1、该值为调用验证函数前输入框的文本内容
%S:1、当插入或删除操作出发验证函数的时候,该值有效
2、该选项表示文本被插入和删除的内容
%v: 1、该组件的validate选项的值
%V: 1、调用验证函数的原因
2、该值是focusin,focusout,ke,或forced(textvariable选项指定的变量值被修改)中的一个
%W: 该组件的名称
'''
'''
为了使用这些选项,我们可以这样修改我们的validatecommand选项:
validatecommand=(f,s1,s2,……)
其中,f是验证函数名,s1,s2等是额外的选项,这些选项会作为参数依次传给f函数,
我们在使用隐藏的功能选项前需要冷却,这就是register()方法将验证函数包装起来。
'''
root = Tk()
def text(content,reason,name):
if e1.get() == '芝麻开门':
print('正确')
print(content, reason, name)
return True
else:
print('错误')
print(content,reason,name)
return False
def text2():
print('validatecommand的返回值为False的时候调用了我')
return False
v = StringVar()
testCMD = root.register(text) #register()方法将验证函数包装起来
e1 = Entry(root,textvariable=v,validate='focusout',\
validatecommand=(testCMD,'%P','%v','%W'),\
invalidcommand=text2)
e2 = Entry(root)
e1.pack(padx=10,pady=10)
e2.pack(padx=10,pady=10)
mainloop()
from tkinter import *
master = Tk()
frame = Frame(master)
frame.pack(padx=10,pady=10)
v1 = StringVar()
v2 = StringVar()
v3 = StringVar()
'''
注意在这里我们不能使用entry控件的get()方法来获取输入的内容
因为当validate选项指定为key的时候,有任何的输入操作都会被拦截
到这个函数当中,也就是说先拦截,只有这个函数返回True,那么输入的内容
才会到变量里面去,也就是说我们使用get函数并无法get到数据,get函数在这个
函数之后才会有效,get函数得到的是变量的值。
所以只有使用%P来获得最新的输入框的内容
'''
def test(content):
if content.isdigit():
return True
else:
return False
#使用了特殊技能的函数需要使用register将其封装起来才可以
testCMD = master.register(test)
e1 = Entry(frame,width=10,textvariable=v1,validate='key',\
validatecommand=(testCMD,'%P')).grid(row=0,column=0)
Label(frame,text='+').grid(row=0,column=1)
e2 = Entry(frame,width=10,textvariable=v2,validate='key',\
validatecommand=(testCMD,'%P')).grid(row=0,column=2)
Label(frame,text='=').grid(row=0,column=3)
#e3输入框是显示结果文本框,所以不允许修改里面的值。将state属性设置为state='readonly'只读
e3 = Entry(frame,width=10,textvariable=v3,state='readonly').grid(row=0,column=4)
def calc():
result=int(v1.get())+int(v2.get())
v3.set(str(result))
Button(frame,text='计算结果',command=calc).grid(row=1,column=2,padx=5)
mainloop()