tkinter - 如何在条目中自动添加斜杠?

tkinter - How to automatically add slashes in Entry?

当我在 Entry 中输入日期时,我希望日期之间有斜杠,如下所示:
"01/23/4567".

我找到了这段代码,虽然它在验证条目是否为数字的同时也能正常工作,但有一个问题。它不允许我清除条目输入。我用按钮尝试了 .delete(0, END) 方法,但似乎根本不起作用,如果你按退格键,第一个字符,本例中的 "0" "01/23/4567",不会被删除, 它留在那里。

import tkinter as tk, re

class DateEntry(tk.Entry):
    def __init__(self, master, **kwargs):
        tk.Entry.__init__(self, master, **kwargs)
        vcmd = self.register(self.validate)
        
        self.bind('<Key>', self.format)
        self.configure(validate="all", validatecommand=(vcmd, '%P'))
        
        self.valid = re.compile('^\d{0,2}(\\\d{0,2}(\\\d{0,4})?)?$', re.I)
             
    def validate(self, text):
        if ''.join(text.split('\')).isnumeric():
            return not self.valid.match(text) is None
        return False
    
    def format(self, event):
        if event.keysym != 'BackSpace':
            i = self.index('insert')
            if i in [2, 5]:
                if self.get()[i:i+1] != '\':
                    self.insert(i, '\')
        

class Main(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        
        DateEntry(self, width=10).grid(row=0, column=0)
        

if __name__ == "__main__":
    root = Main()
    root.geometry('800x600')
    root.title("Date Entry Example")
    root.mainloop()

如果您需要能够清除小部件,您的验证函数需要考虑空值的特殊情况。

def validate(self, text):
    if text.strip() == "":
        # allow a completely empty entry widget
        return True
    if text ''.join(text.split('\')).isnumeric():
        return not self.valid.match(text) is None
    return False