使用tkinter条目python验证用户输入3

问题描述:

我在表单上有一个文本框和一个标签。我需要从输入框中获取数据并检查以确保其浮动。使用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''

理想情况下,我希望它清除文本框。我可以得到一个消息框,但无法再次清除该文本框。

请帮忙。

要清除文本字段,您可以使用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谢谢你指出。现在纠正。 –