最近,我发现Entry小部件的验证选项非常有用(参见this question)。我最近尝试编写验证命令,以验证用户是在键入十六进制代码还是命名颜色。我写了这个,它适用于十六进制代码,它偶尔适用于颜色。除了其他方面,它还可以在每个按键上运行。 (validate=ALL
)
def checkColorValid(P):
global backgroundColor
if not P:
return True
if P.lower() in colors:
backgroundColor = P
return True
if P[0] == '#':
try:
if len(P) == 1:
return True
int(P[1:], 16)
if len(P) < 8:
backgroundColor = P
return True
else:
return False
except ValueError:
return False
for color in colors:
if color.startswith(P.lower()):
return True
colors
是所有有效命名颜色的列表
验证代码有效,除非您尝试键入命名颜色,并开始反复键入相同的字符。一旦发生这种情况,验证似乎就会停止工作。在您重新启动程序之前,它根本不会运行。
答案 0 :(得分:1)
验证码可能会返回None
而不是True
或False
。也许添加最终的返回声明会有所帮助。