Ограничение поля ввода в виджете 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()