最近,我发现条目小部件的验证选项非常有用(参见这个问题)。我最近尝试编写一个验证命令来验证用户是否输入了十六进制代码或命名颜色。我写了这个,它对十六进制代码很有效,偶尔对颜色也有效。除其他外,它在每次按键上运行。(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
是所有有效命名颜色的列表。
验证代码可以工作,除非您试图键入一个命名的颜色,并开始一遍又一遍地键入相同的字符。一旦发生这种情况,验证似乎就会停止工作。它不再运行,直到你重新启动程序。
验证代码可能返回None
而不是True
或False
。也许添加最后的返回语句会有所帮助。
遇到了同样的问题,在搜索中找到了这个页面。不喜欢它;但我想不出更好的办法。然后我意识到我想多了。Python有一个很好的方法来测试任何内容是否有效,'try'。不一定是bg;只要对象是易于使用的,无论你测试的颜色。
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