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

2024-03-29 11:23:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我在这里有几行代码来验证我的entry小部件,它工作得很好,但是在删除内容并想重新设置验证之后,它就不起作用了。在

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()

Tags: key代码registerconfigreturndefrootdelete
2条回答

如果修改验证规则以允许同时删除多个字符,则根本不需要禁用验证。如果键入“123”并运行e.delete(0, END)而不禁用验证,则MoneyValidation的值将为“123”。如果允许,可以单独验证这些数字的变化。在

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()调用期间禁用了验证,那么这是不可能的。在

我觉得你把这件事弄得太难了。只需关闭验证,删除文本并再次打开验证:

def delete():
    e.config(validate="none")
    e.delete(0, END)
    e.config(validate="key")

相关问题 更多 >