Python Tkinter Entry Фильтрация текста при вставке
Стоит задача: Допустить ко вводу в Entry только цифры.
Есть код, который обрабатывает ввод с клавиатуры. Если вставить в Entry "123123" - все ок. Если - "1231232h","1231232 ", " 1231232h" - в Entry останется прежний текст.
Какой метод применить, чтобы при вставке такого рода строк оставались только цифры? Пример: хочу вставить " 1231232h" - вставляется "1231232"
Строка должна быть определенной длинны, н-р 8 символьная.
P.S. Код который обрабатывает ввод с клавиатуры:
def is_valid(newval):
return re.match("^\d{0,8}$", newval) is not None
root = Tk()
root.title("Hi, boss")
root.geometry("240x80")
check = (root.register(is_valid), "%P")
entr = ttk.Entry(validate="key", validatecommand=check,justify='center')
entr.pack()
Ответы (1 шт):
Автор решения: Master's Time
→ Ссылка
Это можно сделать следующим образом:
import tkinter as tk
def check(*_):
if not entry.var.get().isdigit():
new = ""
for i in entry.var.get():
if i.isdigit():
new+=i
entry.var.set(new)
if __name__ == '__main__':
root = tk.Tk()
entry = tk.Entry(root)
entry.var = tk.StringVar()
entry['textvariable'] = entry.var
entry.var.trace_add('write', check)
entry.pack()
tk.mainloop()
P.S. Это ответ на первый вопрос(до того, как поменяли вопрос)