Validation 使用tkinter对整数和浮点值进行条目小部件验证

Validation 使用tkinter对整数和浮点值进行条目小部件验证,validation,tkinter,floating-point,integer,widget,Validation,Tkinter,Floating Point,Integer,Widget,所以我有一些代码可以用来验证一个条目小部件,这样就只能输入整数值了。我希望达到同样的效果,但不只是整数值,整数值和浮点值都除外 from tkinter import * root = Tk() def testVal(inp,acttyp): if acttyp == '1': #insert if not inp.isdigit(): return False return True entry = Entry(root, valida

所以我有一些代码可以用来验证一个条目小部件,这样就只能输入整数值了。我希望达到同样的效果,但不只是整数值,整数值和浮点值都除外

from tkinter import *
root = Tk()
def testVal(inp,acttyp):
    if acttyp == '1': #insert
        if not inp.isdigit():
            return False
    return True
entry = Entry(root, validate="key")
entry['validatecommand'] = (entry.register(testVal),'%P','%d')
entry.pack()

root.mainloop()

您只需对输入文本调用
float()
,即可确定它是整数还是浮点:

from tkinter import *

def validate_entry(inp):
    try:
        float(inp)
    except:
        return False
    return True

root = Tk()
Entry(root, validate='key', vcmd=(root.register(validate_entry), '%P')).pack()
root.mainloop()

我的基本函数是Float(),用于Tkinter条目小部件浮动验证,限制为(-90.00到90.00)

从tkinter导入*
def isfloat(P):
如果(P==”或P==“-”):
返回真值
其他:
c=0
i、 j,k,l=1,1,1,1
对于P中的x:
如果(i==2):
如果(j==2):
如果(k==1):
如果(x=='1'或x=='2'或x=='3'或x=='4'或x=='5'或x=='6'或x=='7'或
x=='8'或x=='9'或x=='0'或x=='11'):
c+=1
如果(x='.'):k=2
elif(k==2):
如果(x=='1'或x=='2'或x=='3'或x=='4'或x=='5'或x=='6'或x=='7'或
x=='8'或x=='9'或x=='0'):
c+=1
elif(j==1):
如果(l==1):
如果(x=='1'或x=='2'或x=='3'或x=='4'或x=='5'或x=='6'或x=='7'或
x=='8'或x=='9'或x=='0'或x=='11'):
c+=1
j=2
如果(x='.'):k=2
elif(l==2):
如果(x=='1'或x=='2'或x=='3'或x=='4'或x=='5'或x=='6'或x=='7'或
x=='8'或x=='9'或x=='0'):
c+=1
j=2
elif(i==1):
如果(x=='1'或x=='2'或x=='3'或x=='4'或x=='5'或x=='6'或x=='7'或
x=='8'或x=='9'或x=='0'或x='-'):
c+=1
i=2
如果(x='-'):l=2
其他:
返回错误
其他:
返回错误
#对于纬度计算,“P”是数字,“-90.0”是从,“-90.0”是到
如果(c==len(P)和float(P)=-90.0):
返回真值
其他:
返回错误
def prt():
如果(列[0].get()!=“”):打印(浮点(列[0].get()),“\t”,键入(浮点(列[0].get()))
其他:错
setup=Tk()
几何设置(“200x200”)
列,d=[],[]
col.append(StringVar())
d、 追加(条目(setup,textvariable=col[0],width=15,validate='all',validatecommand=((setup.register(isfloat)),'%P'))
d[0]。网格(行=0,列=0)
按钮(设置,text=“Print”,command=prt).grid(行=1,列=0)
setup.mainloop()

您是否要求我们为您编写代码?你不明白问题的哪一部分?这正是我想要的。然而,我在使用它时遇到的一个问题是,当从条目小部件中删除值时,第一个值似乎没有被删除。我已尝试使用entry.delete(0,END)清除条目,但当此验证应用于条目小部件时,它不起作用。这是因为空字符串无法转换为浮点。如果需要,只要在输入为空时返回True即可。
from tkinter import *

def isfloat(P):
    if (P == "" or P == "-"):
        return True
    else:
        c=0
        i,j,k,l=1,1,1,1
        for x in P:
            if(i==2):
                if(j==2):
                    if(k==1):
                        if(x=='1' or x=='2' or x=='3' or x=='4' or x=='5' or x=='6' or x=='7' or
                           x=='8' or x=='9' or x=='0' or x=='.'):
                            c+=1
                            if(x=='.'):k=2
                    elif(k==2):
                        if(x=='1' or x=='2' or x=='3' or x=='4' or x=='5' or x=='6' or x=='7' or
                           x=='8' or x=='9' or x=='0'):
                            c+=1
                elif(j==1):
                    if(l==1):
                        if(x=='1' or x=='2' or x=='3' or x=='4' or x=='5' or x=='6' or x=='7' or
                           x=='8' or x=='9' or x=='0' or x=='.'):
                            c+=1
                            j=2
                            if(x=='.'):k=2
                    elif(l==2):
                        if(x=='1' or x=='2' or x=='3' or x=='4' or x=='5' or x=='6' or x=='7' or
                           x=='8' or x=='9' or x=='0'):
                            c+=1
                            j=2                        

            elif(i==1):
                if(x=='1' or x=='2' or x=='3' or x=='4' or x=='5' or x=='6' or x=='7' or
                   x=='8' or x=='9' or x=='0' or x=='-'):
                    c+=1
                    i=2
                    if(x=='-'):l=2
                else:
                    return False
            else:
                return False
        #For latitude calculation, 'P' is the number, '-90.0' is the from, '-90.0' is the to
        if(c==len(P) and float(P)<=90.0 and float(P)>=-90.0):
            return True
        else:
            return False

def prt():
    if(col[0].get()!=""):print(float(col[0].get()), "\t", type(float(col[0].get())))
    else:False

setup=Tk()
setup.geometry("200x200")           
col,d=[],[]         
col.append(StringVar())
d.append(Entry(setup, textvariable=col[0], width=15, validate='all', validatecommand=((setup.register(isfloat)), '%P')))
d[0].grid(row=0,column=0)
Button(setup,text="Print",command=prt).grid(row=1,column=0)
setup.mainloop()