Ограничение поля ввода в виджете Entry

Как в поле ввода (Entry) ограничить количество вводимых знаков до 12?

Пытался так, но не получается:

...

def cht():
    s = self.F.get().strip()
    s = s[0] if s in range(0,12) else ''
    self.F.delete ('12', END)
    self.F.insert(INSERT, s)

    self.F = ttk.Entry(Form3)
    self.F.place(x=180, y=30)        
    self.F.bind('<KeyRelease>', cht)

...

Ответы (1 шт):

Автор решения: S. Nick

Как использовать validatecommand для проверки вводимых пользователем данных в Entry.

import tkinter as tk


def onValidate(d, i, P, s, S, v, V, W):
    print(f'\nOnValidate: ') 
    print(f'd={d}') # "d='%s'" % d
    print(f'i={i}') # "i='%s'" % i
    print(f'P={P}') # "P='%s'" % P
    print(f's={s}') # "s='%s'" % s
    print(f'S={S}') # "S='%s'" % S
    print(f'v={v}') # "v='%s'" % v
    print(f'V={V}') # "V='%s'" % V
    print(f'W={W}') # "W='%s'" % W
    # разрешать только в том случае, если длина строки <= 12  
    return (len(P) <= 12)

root = tk.Tk()

vcmd = (root.register(onValidate), 
        '%d', '%i', '%P', '%s', '%S', '%v', '%V', '%W')
        
entry = tk.Entry(root, 
    validate="key", 
    validatecommand=vcmd)
entry.pack()

root.mainloop()

введите сюда описание изображения

→ Ссылка