Tkinter条目验证:检查有效的颜色或颜色的一部分



最近,我发现条目小部件的验证选项非常有用(参见这个问题)。我最近尝试编写一个验证命令来验证用户是否输入了十六进制代码或命名颜色。我写了这个,它对十六进制代码很有效,偶尔对颜色也有效。除其他外,它在每次按键上运行。(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而不是TrueFalse。也许添加最后的返回语句会有所帮助。

遇到了同样的问题,在搜索中找到了这个页面。不喜欢它;但我想不出更好的办法。然后我意识到我想多了。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

相关内容

  • 没有找到相关文章

最新更新