Tkinter 输入验证:检查有效颜色或颜色部分
最近,我发现Entry小部件的验证选项非常有用(可以参考这个问题)。我尝试写一个验证命令,用来检查用户输入的是十六进制颜色代码,还是一个命名颜色。我写的这个代码对十六进制颜色代码效果很好,但对命名颜色的验证偶尔会失效。这个验证会在每次按键时运行,其他一些情况也是如此。(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
是一个包含所有有效命名颜色的列表。
这个验证代码是有效的,除非你在输入一个命名颜色时,不停地重复输入同一个字符。一旦发生这种情况,验证似乎就停止工作了。它完全不再运行,直到你重启程序。
2 个回答
0
我也遇到过同样的问题,在搜索时找到了这个页面。虽然不太喜欢这个方法,但又想不出更好的办法。后来我意识到自己想得太复杂了。Python有一个很好的方法来测试任何东西是否有效,那就是用'try'。这个'try'不需要很复杂,只要用一个简单的对象来测试你想要的颜色就可以了。
def ColorTest(SomeColor):
IsGood = True
ColorTest=Toplevel()
try:
ColorTest['bg'] = SomeColor # Set backround color
#print(SomeColor+' is a valid color')
ColorTest.destroy()
return IsGood
except:
#print(SomeColor+' is an invalid color')
IsGood = False
ColorTest.destroy()
return IsGood
2
验证代码有可能返回 None
,而不是 True
或 False
。也许加一个最后的返回语句会有所帮助。