【问题标题】:Validation of a date in a tkinter entry box在 tkinter 输入框中验证日期
【发布时间】:2014-03-20 19:08:07
【问题描述】:

您好,我想确保用户只能在输入框中输入日期。我熟悉数据库中的通配符搜索,因此我尝试了这个;

from tkinter import *
window=Tk()

def Validate():
    if Entry1.get() == ('**/**/****'):
        window2=Tk()
        label2= Label(window2,text = 'Successful')
        label2.pack()
    else:
        window3=Tk()
        label3 = Label(window3,text = 'Failed')
        label3.pack()

Entry1 = Entry(window)
Entry1.pack()


label1 = Label(window, text = "Please enter date")
label1.pack()

submitbutton = Button(window, text = "Submit")
submitbutton.pack()

submitbutton.configure(command=Validate)

但显然这不起作用,有什么想法吗? 谢谢

【问题讨论】:

  • 定义您认为有效的日期。这听起来很愚蠢,但可能会有所不同。
  • 任何有 2 位日、2 位月和 2 位数字的日期,或者不是太难的未来日期?
  • 99/99/13 是有效日期吗?它有 2/2/2 位,以后不会出现。

标签: python tkinter


【解决方案1】:

如果你想要一个真正的验证,它需要比一行多一点的工作。您需要两件事:数字位数和过去的实际日期。对于位数,我将 split() 用户的日期字符串放入一个列表中,然后遍历每个项目,检查每个项目是否 1) 一个整数,以及 2) 的 len() 为 2。

验证它是日期格式后,您可以使用 Python 的 time 模块 (http://docs.python.org/3.2/library/time.html) 检查它是否是以前存在的日期。在本例中,systemDatestruct_time 对象中的当前时间,您可以使用 strptime 函数将 userDate 设置为相同类型的对象进行比较检查:

>>> from time import strptime, struct_time, localtime
>>> systemDate = struct_time(localtime())
>>> userDate = strptime('01/02/03', '%m/%d/%y')
>>> userDate < systemDate
True

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-28
    • 2012-10-28
    • 2020-10-09
    • 1970-01-01
    相关资源
    最近更新 更多