删除内容后如何设置回tkinter条目验证

时间:2018-06-05 14:31:30

标签: python python-3.x tkinter

我在这里有几行代码来验证我的entry窗口小部件工作正常但是在删除内容并想要设置验证后它不起作用。删除后我能够输入{{1我不希望条目接受。

text

2 个答案:

答案 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")