小白学tkinter(entry的验证函数)

这篇博客接着讲entry的验证函数,不过主要是使用的Tkinter的隐藏功能,也就是关于验证函数的一些额外的选项。

如下图所示:
这里写图片描述
‘这些选项都是带引号的’
为了使用这些选项,我们可以这样修改我们的validatecommand选项:
validatecommand=(f,s1,s2,……)
其中,f是验证函数名,s1,s2等是额外的选项,这些选项会作为参数一次传给f函数,再次之前需要将register()方法将验证函数包装起来。

from tkinter import *  
root = Tk()  
v = StringVar()  
def test(f,s1,s2):
    if f == '小甲鱼':
        print('正确')
        print(f,s1,s2)
        return True
    else:
        print('错误')
        print(f,s1,s2)
        return False
test_register = root.register(test) #root调用register方法才能用到下边的validatecommand选项中
e1 = Entry(root,textvariable = v,validate = 'focusout',\
           validatecommand = (test_register,'%P','%i','%s')) #这些额外的参数带引号啊 ,要注意
e2 = Entry(root)
e1.pack()
e2.pack()
mainloop()


'''用验证函数模拟简单计算器'''
from tkinter import *
root = Tk()
frame = Frame(root) #把整个布局放到框架中,更好调节
frame.pack(padx = 10,pady = 10)
v1 = StringVar()
v2 = StringVar()
v3 = StringVar()

def test(content):
    if content.isdigit():#isdigit()方法,这是str的一个函数,只允许输入数字
       return True
    else:
        return False


testCmd = root.register(test)#通过register方法转换为validatecommand选项能接收的函数
Entry(frame,textvariable = v1,width = 10,validate = 'key',\
      validatecommand = (testCmd,'%P')).grid(row = 0,column = 0) #用%P获取最新输入的字符串,而不用v1.get()小甲鱼说了很多,没看明白,这就不写了,呵呵
Label(frame,text = '+').grid(row = 0,column = 1)
Entry(frame,textvariable = v2,width = 10,validate = 'key',\
      validatecommand = (testCmd,'%P')).grid(row = 0,column = 2)
Label(frame,text = '=').grid(row = 0,column = 3)
Entry(frame,textvariable = v3,width = 10,state = 'readonly',validate = 'key',\
      validatecommand = (testCmd,'%P')).grid(row = 0,column = 4)

def calc():
    result = int(v1.get()) + int(v2.get())
    v3.set(result)

Button(frame,text = '计算结果',command = calc).grid(row = 1,column = 2,pady =5)
mainloop()
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值