Python 删除内容后如何设置tkinter条目验证
我这里有几行代码来验证我的Python 删除内容后如何设置tkinter条目验证,python,python-3.x,tkinter,Python,Python 3.x,Tkinter,我这里有几行代码来验证我的条目小部件,该小部件工作正常,但在删除内容并想将验证设置回原处后,它就不工作了。删除内容后,我可以键入文本,我不希望条目被接受 from tkinter import * def MoneyValidation(S): if S in ['0', '1', '2', '3', '4', '5']: return True root.bell() return False def delete(): vcmd_mon
条目
小部件,该小部件工作正常,但在删除内容并想将验证设置回原处后,它就不工作了。删除内容后,我可以键入文本
,我不希望条目被接受
from tkinter import *
def MoneyValidation(S):
if S in ['0', '1', '2', '3', '4', '5']:
return True
root.bell()
return False
def delete():
vcmd_money2 = (root.register(MoneyValidation), '%S')
e.config(invcmd="keys", vcmd=vcmd_money2)
e.delete(0, END)
e.delete(0, END)
vcmd_money = (root.register(MoneyValidation), '%S')
e.config(validate="key", vcmd=vcmd_money)
root = Tk()
vcmd_money = (root.register(MoneyValidation), '%S')
e = Entry(root, validate="key", vcmd=vcmd_money)
e.pack()
b = Button(text="DELETE", command=delete)
b.pack()
root.mainloop()
我想你把这条路弄得太难了。只需关闭验证,删除文本,然后再次打开验证:
def delete():
e.config(validate="none")
e.delete(0, END)
e.config(validate="key")
如果修改验证规则以允许一次删除多个字符,则根本不需要禁用验证。如果键入“123”并在不禁用验证的情况下运行
e.delete(0,END)
,则MoneyValidation
的值将为“123”。如果单独验证S的每个字符,则可以允许进行此类多位数更改
from tkinter import *
def MoneyValidation(S):
if all(c in ['0', '1', '2', '3', '4', '5'] for c in S):
return True
root.bell()
return False
def delete():
e.delete(0, END)
root = Tk()
vcmd_money = (root.register(MoneyValidation), '%S')
e = Entry(root, validate="key", vcmd=vcmd_money)
e.pack()
b = Button(text="DELETE", command=delete)
b.pack()
root.mainloop()
作为一个额外的好处,使用这种方法,用户可以突出显示其号码的一部分,并使用退格键将其删除。如果您保持MoneyValidation的原样,并且只在delete()调用期间禁用验证,那么这是不可能的。找到了答案。怎么了?我觉得你的很简单,打得好。这还允许剪切和粘贴有效数字,从而使整个验证更加用户友好。