Python Tkinter Entry Фильтрация текста при вставке

Рейтинг: 0Ответов: 1Опубликовано: 24.03.2023

Стоит задача: Допустить ко вводу в 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()

Ответы

▲ 0

Это можно сделать следующим образом:

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. Это ответ на первый вопрос(до того, как поменяли вопрос)