Tkinter教程之Entry篇

# Tkinter教程之Entry篇
# Entry用来输入单行文本
'''1.第一个Entry程序'''
from tkinter import *

root = Tk()
# 创建entry
Entry(root, text='input your text here').pack()
# 上面的代码目的是创建一个Entry对象,并在Entry上显示'input your text here',运行此代码,并没有看到文本的显示,
# 由此可知与Lable和Button不同,Entry的text属性不可以设置Entry的文本

'''2.在Entry中设定初始值,使用textvariable将变量与Entry绑定'''
e = StringVar()
entry = Entry(root, textvariable=e).pack()
e.set('input your text here')

'''3.设置为只读Entry.
Entry的另一个比较有用的属性,设置为只读,不允许用户对它的值改变。
设置state属性为'readonly'
'''
e2 = StringVar()
entry = Entry(root, textvariable=e2)
e2.set('not modify')
entry.pack()
entry['state'] = 'readonly'
# 实际上Entry的属性值可以使用的也为normal/active/disabled,'readonly'与disabled一样
root.mainloop()

'''4.设置为密码输入框
#将Entry作为一个密码输入框来使用,即不显示用户输入的内容值,用特定符号代替。使用用属性
show来指定。
'''
from tkinter import *

root = Tk()
e = StringVar()
entry = Entry(root, textvariable=e)
e.set('input your text here')
entry.pack()
# 使用*来显示输入的内容,如果喜欢可以改为其它字符
entry['show'] = '*'
# 分别使用*#$显示输入的文本内容
for mask in ['*', '#', '$']:
    e = StringVar()
    entry = Entry(root, textvariable=e)
    e.set('password')
    entry.pack()
    entry['show'] = mask

root.mainloop()

'''5.验证输入的内容是否符合要求。
Entry 组件是支持验证输入内容的合法性的,比如要求输入数字,你输入了字母那就是非法。
实现该功能,需要通过设置 validate、validatecommand 和 invalidcommand 选项。

首先启用验证的“开关”是 validate 选项,该选项可以设置的值有:
focus:当 Entry 组件获得或失去焦点的时候验证
focusin: 当 Entry 组件获得焦点的时候验证
focusout: 当 Entry 组件失去焦点的时候验证
key:当输入框被编辑的时候验证
all: 当出现上边任何一种情况的时候验证

其次是为 validatecommand 选项指定一个验证函数,该函数只能返回 True 或 False 表示验证的结果。
一般情况下验证函数只需要知道输入框的内容即可,可以通过 Entry 组件的 get() 方法获得该字符串。

然后,invalidcommand 选项指定的函数只有在 validatecommand 的返回值为 False 的时候才被调用。
'''
from tkinter import *

root = Tk()
e = StringVar()


def validateText():
    val = entry.get()
    if val == '654321':
        print("正确!")
        return True
    else:
        '''
        删除内容,-- 删除参数 first 到 last 范围内(包含 first 和 last)的所有内容
        -- 如果忽略 last 参数,表示删除 first 参数指定的选项
        -- 使用 delete(0, END) 实现删除输入框的所有内容
       '''
        entry.delete(0, END)
        return False


def test():
    print('invalidcommand:我被调用了')
    return True

entry = Entry(root, textvariable=e, validate='focusout', validatecommand=validateText,invalidcommand=test)
entry.pack()
Entry(root, text='sure').pack()
root.mainloop()
# 还有其他的属性fg/bg/relief/width/height/justify/state使用方法与Button相同,不再举例。

'''
最后,其实 Tkinter 还有隐藏技能,不过需要冷却才能触发,请听小甲鱼一一道来......
Tkinter 为验证函数提供一些额外的选项:
额外选项	含义
'%d'	操作代码:0 表示删除操作;1 表示插入操作;2 表示获得、失去焦点或 textvariable 变量的值被修改
'%i'	1. 当用户尝试插入或删除操作的时候,该选线表示插入或删除的位置(索引号)
        2. 如果是由于获得、失去焦点或 textvariable 变量的值被修改而调用验证函数,那么该值是 -1
'%P'	1. 当输入框的值允许改变的时候,该值有效
        2. 该值为输入框的最新文本内容
'%s'	该值为调用验证函数前输入框的文本内容
'%S'	1. 当插入或删除操作触发验证函数的时候,该值有效
        2. 该选项表示文本被插入和删除的内容
'%v'	该组件当前的 validate 选项的值
'%V'	1. 调用验证函数的原因
        2. 该值是 'focusin','focusout','key' 或 'forced'(textvariable 选项指定的变量值被修改)中的一个
'%W'	该组件的名字

为了使用这些选项,你可以这样写:validatecommand=(f, s1, s2, ...)

其中,f 就是你“冷却后”的验证函数名,s1、s2、s3 这些是额外的选项,这些选项会作为参数依次传给 f 函数。
我们刚刚说了,使用隐藏技能前需要冷却,其实就是调用 register() 方法将验证函数包装起来:
'''
from tkinter import *

master = Tk()

v = StringVar()


def test(content, reason, name):
    if content == "小甲鱼":
        print("正确!")
        print(content, reason, name)
        return True
    else:
        print("错误!")
        print(content, reason, name)
        return False


testCMD = master.register(test)
e1 = Entry(master, textvariable=v, validate="focusout", validatecommand=(testCMD, '%P', '%v', '%W'))
e2 = Entry(master)
e1.pack(padx=10, pady=10)
e2.pack(padx=10, pady=10)

mainloop()

  • 10
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值