我在这里有几行代码来验证我的entry
窗口小部件工作正常但是在删除内容并想要设置验证后它不起作用。删除后我能够输入{{1我不希望条目接受。
text
答案 0 :(得分:2)
如果您修改验证规则以允许一次删除多个字符,则根本不需要禁用验证。如果您键入" 123"并且在不禁用验证的情况下运行e.delete(0, END)
,然后MoneyValidation
的S值将为" 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()调用期间禁用验证,那将是不可能的。
答案 1 :(得分:1)
我认为你的做法比必要时更难。只需关闭验证,删除文本并再次打开验证:
def delete():
e.config(validate="none")
e.delete(0, END)
e.config(validate="key")