Как вставить символ вместо другого в Tkinter Entry с помощью команды validate? - PullRequest
0 голосов
/ 15 апреля 2020

Начиная свое приключение с python Tkinter Я только что попытался разработать Entry, которая принимает только даты. Тем не менее, это больше, чем просто проверка записи. Я пытался скоординировать «внешний вид» содержимого, добавляя «/» в надлежащие позиции, чтобы иметь правильный формат даты (дд / мм / а-а-а-а). Проблема в том, что если я вставлю символ вместо другого, используя метод Entry или StringVar, функция проверки больше не будет работать для любой другой вставки в Entry.

В чем проблема с этим решением? Есть ли способ заставить его работать?

Вот код, который я разрабатывал:

from tkinter import *
    root = Tk()


def f(att):
    print(att)
    if len(att) == 0:
        return True
    elif len(att) == 1 and att in "123":
        return True
    elif len(att) == 2 and att.isdigit() and int(att) < 32:
        return True
    elif len(att) == 3 and att[-1] != "/":            
        ent.insert(END, "/")
        return True        
    else:
        return False

ent = Entry(root, validate="key")
ent["validatecommand"] = (ent.register(f), "%P")

ent.pack(pady=10, padx=10)
ent.focus()

root.mainloop()
...