只允许输入框中出现浮点数



我有一个输入框,我希望用户只能输入浮点数。

下面是我的函数:

class Prox(Entry):
'''Entry widget that only accepts digits'''
def __init__(self, master=None, **kwargs):
self.var = StringVar(master)
self.var.trace('w', self.validate)
Entry.__init__(self, master, textvariable=self.var, **kwargs)
self.get, self.set = self.var.get, self.var.set
def validate(self, *args):
value = self.get()
if not value.isdigit():
self.set(''.join(x for x in value if x.isdigit()))

它可以很好地处理整数,但不允许用户输入浮点数。我看到了一些解决方案,当用户没有输入浮点数时返回错误,如:

try:
value=float(input(“Enter your value”))
except:
print(“Error. Non numeric values not allowed”)

但那不是我真正想做的。我希望用户不能输入浮点数以外的任何东西(就像我到目前为止输入的整数一样)

按照Bryan的指示使用validate命令。使用try-except块检查该值是否为有效数字。

最小的例子

import tkinter as tk
def check_float(val):
try:
float(val)
cvt = True

except ValueError:
cvt = False
return cvt or val==""
root = tk.Tk()
reg = root.register(check_float)
entry = tk.Entry(root, validate="key", validatecommand=(reg, '%P'))
entry.pack()
root.mainloop()

我想我找到答案了:

class Prox(Entry):
'''Entry widget that only accepts digits'''
def __init__(self, master=None, **kwargs):
self.var = StringVar(master)
self.var.trace('w', self.validate)
Entry.__init__(self, master, textvariable=self.var, **kwargs)
self.get, self.set = self.var.get, self.var.set
def validate(self, *args):
value = self.get()
dotCounter = []
if not value.isdigit() or value != '.':
self.set(''.join(x for x in value if x.isdigit() or x=='.'))
for i in value:
if i == '.':
dotCounter.append(i)
if len(dotCounter) > 1:
self.delete(len(self.get())-1)
dotCounter.clear()

该函数只允许输入数字和逗号,并检查用户是否输入了多个逗号。如果他这样做,它会自动删除它。

也许不是最干净的方法,但它是有效的....

最新更新