2016-07-02 5 views
0

우선, OOP를 사용하지 않아서 미안합니다. 그런 작은 프로그램의 복잡성을 피하기로 결정했습니다.비슷한 유효성 검사 기능이 작동하지 않습니다.

from tkinter import * 
root = Tk() 
root.title("Entry Validation") 
root.geometry("300x100") 

def validation_function(text): 
    if len(text) <= 5: 
     try: 
      text = int(text) 
      return True 
     except: 
      return False 
    else: 
     return False 

vcmd = root.register(validation_function) 
entry = Entry(root, validate='key', validatecommand=(vcmd, "%P")) 
entry.pack() 

이 정상 작동합니다 그래서 여기 내 프로그램입니다 (기본적으로, 그것은 단지 그 최대 길이 5의 정수로 구성된 텍스트를 수있는 항목 위젯입니다). 내가 유효성 검사 기능의 몸에 약간의 변화를 할 때, 그것은 작동하지 않습니다

def validation_function(text): 
    try: 
     text = int(text) 
     if len(text) <= 5: 
      return True 
     else: 
      return False 
    except: 
     return False 

을 내가 느끼는 문제가 여기에 있습니다 :

except: 
    return False 

아마 최대 길이 부분은하지 않습니다 try-except로 잘 어울립니다. 그러나 :

def validation_function(text): 
    try: 
     if len(text) <= 5: 
      return True 
     else: 
      return False 
    except: 
     return False 

올바르게 작동합니다. 하지만 최대 길이 부분 만 있습니다. 또한 정수 만 허용하고 싶습니다. 첫 번째 예제에서 한 적이 있지만 내 질문은 : 최대 정수 부분을 사용하여 최대 길이 부분의 위치를 ​​변경할 때 왜 작동하지 않습니까?

+0

이유를 설명하지 않고 내 질문에 downvote하지 마십시오 시도 예외

을 올릴 것이다 ... len(int)를 호출 할 수있는 int입니다! 그것은 나의 특권을 제한한다. 난 그냥 여기 새로 왔어. 어서와! –

답변

3

text은 ... 당신이이

def validation_function(text): 
    try: 
     int(text) 
    except: 
     return False 
    if len(text) <= 5: 
     return True 
    return False 
+0

맞아요! TypeError를 정상적으로 발생시키고이 경우에는 예외가 발생합니다. 나는 그것에주의를 기울여야 만했다. .. 고마워! –

+0

죄송합니다. 질문이 하나 더 있습니다 : 입력 텍스트를 삭제하려고 할 때 왜 문제가 있습니까? 엔트리 위젯에 바인딩 된 명확한 함수를 사용하기조차하기 때문에 입력 영역을 클릭하면 반드시 지워 져야합니다. 또한 버튼을 클릭 한 후에 엔트리 텍스트를 없애기위한 명확한 버튼을 추가했지만 둘 다 작동하지 않습니다. 그것을 고칠 방법이 있습니까? 나는 여러 가지 방법을 시도했지만 그들 중 누구도 운동하지 못했습니다. –

+0

해결 방법 : 텍스트가 아닌 경우 : 없음 return True –

관련 문제