【问题标题】:Entry Validation with tkinter使用 tkinter 进行条目验证
【发布时间】:2015-09-10 21:21:36
【问题描述】:

当我试图输入一些东西时,它只是进入无效块,而不让我输入任何键。我明白,我可以通过使用其他选项 'focus' 、 'focusout' 等来摆脱它。但我希望它与 key 一起使用:

from tkinter import *
import re

def validate_email(P):
   # master.errormsg.config(text='')
   x = re.match(r"[^@]+@[^@]+\.[^@]+", P)
   print(P)
   errormsg.config(text='')
   emailentry.focus_set()
   return x != None


def invalid_email(P):
    errormsg.config(text='Invalid Email Address')
    emailentry.focus_set()

if __name__ == '__main__':
    master = Tk()
    errormsg = Label(master,text='', fg='red')
    errormsg.pack()
    L1 = Label(master, text='Enter Email Address')
    L1.pack(side=LEFT)
    vcmd = (master.register(validate_email), '%P')
    invcmd = (master.register(invalid_email), '%P')
    emailentry = Entry(master, validate="focusout", validatecommand=vcmd,  
    invalidcommand=invcmd)
    emailentry.pack()
    Button(master, text="Login").pack()
    master.mainloop()

【问题讨论】:

  • 哎呀!!使用 validate = key 更改代码....我指的是 'key'

标签: python validation tkinter


【解决方案1】:

我自己是一个初学者,但在运行代码和调试时,当您使用“键”时,输入字段正在获取您当前在键盘上按下的键的值。您的两个函数正在评估该值,并且每次都失败,因为它很粗糙而不是电子邮件地址。

如果您查看控制台,您会看到 print(P) 正在打印出您当时碰巧按下的任何键。

【讨论】:

  • 关闭,但不完全。如果允许编辑(按下的键),P 将是条目的值。碰巧的是,由于每个键都被拒绝,因此 P 始终是单个字符。在稍有不同的情况下,P 可能是一个长字符串(例如,如果在允许编辑之前为条目赋予了默认值)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多