python-Tkinter输入框+验证输入内容(六)
一、普通输入框
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()