输入字段的验证

Validation of Enter Fields

Interactively validating Entry widget content in tkinter

上面的 link 解释了如何进行验证。

我正在尝试做同样的事情。但不知何故我做不到。

这是一个10位数字的字符串。前两个是字母,接下来的两个数字然后再接下来的两个将是字母,然后其余的都是数字。 例如 MH02UH2012.

我遇到的另一个问题是,当我 运行 这是 S 的打印时,只有在没有打印之后,我才出现在前三个输入中。有时它只打印第一个输入的变量。我无法理解问题所在

import tkinter
tk=tkinter.Tk()

def only_numeric_input(P,S,i):
    i = int(i)
    print (i, S)

    if S == " ":

        return False

    elif i < 2:
        if not S.isdigit():

            return True


    elif i > 5:

        if S.isdigit():

            return True
        else:

            return False
    elif i > 9:
        return False

e1=tkinter.Entry(tk)
e1.grid(row=0,column=0)
c=tk.register(only_numeric_input)
e1.configure(validate="key",validatecommand=(c,'%P', "%S", "%i"))
tk.mainloop()

only_numeric_input 函数的条件语句中存在问题。试试下面的 only_numeric_input 函数。

def only_numeric_input(P,S,i):
    i = int(i)
    print (i, S)
    if S == " ":
        return False

    if i < 2 or (i>3 and i<6):
        if S.isalpha() and S.isupper():
            return True
        else:
            return False
    elif i<10:
        if S.isdigit():
            return True
        else:
            return False
    elif i > 9:
        return False