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

[python] view plain copy

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

[python] view plain copy

'''''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

相同,不

再举例。 

[python] view plain copy

'''''

最后,其实 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() 

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,084评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,623评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,450评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,322评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,370评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,274评论 1 300
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,126评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,980评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,414评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,599评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,773评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,470评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,080评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,713评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,852评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,865评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,689评论 2 354

推荐阅读更多精彩内容