Interactively validating Entry widget content in tkinter
上面的链接说明了如何进行验证。
我正在尝试做同样的事情。但是不知何故我做不到。
它是一个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()
答案 0 :(得分:1)
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