2017-10-10 10 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の数値をとりますが、値/インデックスが他の数値に対して正しく読み込まれないように文字列を使用してください。

変数がfloatであるかどうかをチェックするためにisinstance()を使用することができます:変数の型がfloatであるかどうかをチェックするために

# 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それを指摘していただきありがとうございます。今すぐ修正する。 –

関連する問題