2017-10-10 116 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),這很好。如果我輸入另一個數字並按'Go'按鈕,它會說'ValueError:無法將字符串轉換爲浮點數:'d''

理想情況下,我希望它清除文本框。我可以得到一個消息框,但無法再次清除該文本框。

請幫忙。

回答

0

要清除文本字段,您可以使用delete()。要在Entry窗口小部件中從頭到尾刪除內容,您需要在「0」到「end」之間定義索引。對於Text小部件,您需要定義行和字符索引。 delete()使用字符串來指示行和列。所以「1.12」將是第一行和第十二個字符。正如@BryanOakley delete()指出的那樣,數字值爲1.0,但您應該使用字符串來防止正確讀取其他數字的值/索引。

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

爲了檢查如果變量類型爲浮動:

您可以使用isinstance()檢查,如果變量是一個浮動與否。

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。人們會說使用鴨子打字(請求寬恕vs許可)。如果你期望總是看到一個浮動,那就試試吧。如果你碰巧沒有得到預期的浮動,那就拋出異常。

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.您應該養成總是使用索引字符串的習慣。 –

+0

@BryanOakley謝謝你指出。現在糾正。 –