2014-05-18 4 views
0

최근에 엔트리 위젯의 유효성 검사 옵션이 매우 유용하다는 것을 발견했습니다 (this question 참조). 최근에 사용자가 16 진수 코드 또는 명명 된 색을 입력했는지 확인하는 유효성 검사 명령을 작성하려고했습니다. 필자는 이것을 작성했으며 16 진법 코드에서 잘 작동하며 산발적으로 색상에 적용됩니다. 다른 모든 것들과 마찬가지로 모든 키 누름에서 실행됩니다. (validate=ALL)Tkinter 입력 유효성 검사 : 유효한 색상이나 색상의 부분을 확인하십시오.

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

유효성 검사 코드가 True 또는 False이 아닌 None을 반환 할 수 있습니다. 아마도 최종 반환 진술을 추가하는 것이 도움이 될 것입니다.

+0

그것이 문제입니다. 유효성 검사 명령이 None을 반환하면 멈추고 영원히 멈추는 것처럼 보입니다. 메서드의 맨 아래에'return False '를 추가하면 모든 경우에 작동합니다. – Balink