python-Tkinter输入框+验证输入内容(六)

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()

猜你喜欢

转载自blog.csdn.net/m0_38039437/article/details/80546167
今日推荐