2017-10-10 6 views
0

양식에 텍스트 상자와 레이블이 있습니다. 입력 상자에서 데이터를 가져와 해당 플로트가 있는지 확인해야합니다.tkinter 항목을 사용하여 사용자 입력 유효성 검사 python 3

nameOfText = (textboxName.get()) 
    ra = float(textboxra.get()) 

    if type(ra) == float: 
     print("Its a number") 
    else: 
     print("Not number") 

양식이 제대로 작동하고 프로그램이 실행되면 작동합니다. 텍스트 상자에 7을 입력하면 인쇄됩니다 (7.0). 다른 번호를 입력하고 '이동'버튼을 누르면 'ValueError : 문자열을 부동으로 변환 할 수 없습니다 :'d ''

이상적으로는 텍스트 상자를 지우고 싶습니다. 나는 메시지 박스를 나타낼 수는 있지만 텍스트 박스를 다시 지울 수는 없습니다.

도와주세요.

답변

0

텍스트 필드를 지우려면 delete()을 사용할 수 있습니다. Entry 위젯에서 처음부터 끝까지 컨텐츠를 삭제하려면 인덱스를 "0"에서 "end"까지 정의해야합니다. 텍스트 위젯의 경우 행 및 문자 색인을 정의해야합니다. delete()은 문자열을 사용하여 행과 열을 나타냅니다. 따라서 "1.12"가 첫 번째 행과 12 번째 문자가됩니다. @BryanOakley에 의해 지적 된대로 delete()은 1.0의 숫자 값을 취할 것이지만 다른 숫자에 대해 값/색인이 잘못 읽히는 것을 막기 위해 문자열을 사용해야합니다.

당신은 변수가 부동인지 아닌지 확인하기 위해 isinstance()를 사용할 수 있습니다 변수 유형은 부동 소수점 인 경우 확인을 위해

# for Entry widget clear. 
textboxName.delete("0", "end") 
# for Text widget clear. 
textboxName.delete("1.0", "end") 

.

x = 5 
y = 5.0 

if isinstance(x, float) == True: 
    print(x,"Is float") 
else: 
    print(x,"Is not a float") 

if isinstance(y, float) == True: 
    print(y,"Is float") 
else: 
    print(y,"Is not a float") 

결과 :

5 Is not a float

5.0 Is float

반면에 당신은 try/except를 사용할 수 있습니다. 사람들은 오리 타이핑 (용서 대 허가 요청)을 사용한다고 말할 것입니다. 항상 플로트를보고 싶다면 그냥 시도하십시오. 플로트가 예상되는 위치에 있지 않으면 예외가 발생합니다.

x = 5 
y = "String of text" 

try: 
    print(float(x)) 
except: 
    print(x,"Cannot be a float") 

try: 
    print(float(z)) 
except: 
    print(y,"Cannot be a float") 

결과 :

5.0

String of text Cannot be a float

+0

텍스트 위젯 인덱스는 문자열이 아닌 수레입니다. '1.0 '을 사용하는 것은 무해한 반면, 혼동을 야기 할 수 있습니다. 인덱스 "1.10"은 라인 1 문자 10을 나타내지 만 부동 소수점 값인 "1.10"은 라인 1 문자 1로 해석됩니다. 인덱스에 항상 문자열을 사용하는 습관을 갖춰야합니다. –

+0

@BryanOakley 지적 해 주셔서 감사합니다. 지금 바로 잡아라. –