В поле ввода Entry необходимо ограничить ввод символов, кроме всех цифр и точки

Просьба помочь либо кодом либо ссылками на полезную информацию, которую видимо я так и не нашел...

Пересмотрел много всяких вариантов, но эти варианты либо не удается подстроить под себя, либо они работают только с целочисленными значениями. Так же думал с вариантом отслеживания нажатой клавиши. В голове это выглядит как внедрение в программу базы исключений. То есть будут перечислены клавиши которые могут вводить свои значения в строку, но ничего подобного я не нашел.

from tkinter import *

tk = Tk() cnvs=Canvas(tk, width = 600, height = 300, bg = 'grey')
cnvs.pack()

def raschet():
    # проверка полей ввода....
    #Если проверка пройдена то
    Result.set('%2.1f'%(float(First.get())+float(Second.get())))
    
         First = StringVar() Second = StringVar() Result = StringVar()

First_entry = Entry(textvariable=First, width = 30, font = 'Arial,
14') Second_entry = Entry(textvariable=Second, width = 30, font =
'Arial, 14') Result_entry = Entry(textvariable=Result, width = 30,
font = 'Arial, 14')

First_entry.place(x=10, y = 10) Second_entry.place(x=10, y = 50)
Result_entry.place(x=10, y = 90)

First_entry.insert(0, "100") Second_entry.insert(0, "30")

lbl1 = Label(tk, width = 16, height = 1, bg = 'grey', font='Arial,
14', text = 'Первый множитель') lbl1.place(x=370, y = 10) lbl2 =
Label(tk, width = 16, height = 1, bg = 'grey', font='Arial, 14',
text = 'Второй множитель') lbl2.place(x=370, y = 50) lbl3 =
Label(tk, width = 16, height = 1, bg = 'grey', font='Arial, 14',
text = 'Результат') lbl3.place(x=370, y = 90)

btn1 = Button(tk, width = 30, height = 2, font='Arial, 18',
text='Посчитать', command = raschet) btn1.place(x=10, y=130)

tk.mainloop()

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

Автор решения: DaNKoR

Я сам же смог наконец-то найти ответ на мой вопрос!!! Вот ребят пример!!!))))

from tkinter import *

def validate(new_value):                             
    try: 
        if new_value == "" or new_value == "-" or new_value == "+":
            return True
        _str = str(float(new_value))
        return True
    except:
        return False    

def click ():
    result.set('%2.3f'%(float(first.get())+float(second.get())))

tk = Tk() tk.title('проверка вводимых знаков') tk.resizable(0,0)

vcmd = (tk.register(validate), '%P')  

canvas = Canvas(tk, width=400, height=250, bg='#e0e0e0',
highlightthickness=3) canvas.pack()

txt1 = Label(tk, text="Введите цифры", bg='#e0e0e0') txt2 =
Label(tk, text="Введите цифры", bg='#e0e0e0') txt3 = Label(tk,
text="Ответ", bg='#e0e0e0')

first = StringVar() second = StringVar() result = StringVar()

first_entry = Entry(textvariable=first, validate='key',
validatecommand=vcmd) second_entry = Entry(textvariable=second,
validate='key', validatecommand=vcmd) result_entry =
Entry(textvariable=result, validate='key', validatecommand=vcmd)

txt1.place(x=5, y=10) txt2.place(x=5, y=40) txt3.place(x=5, y=70)
first_entry.place(x =100 , y =10) second_entry.place(x =100 , y =40)
result_entry.place(x =100 , y =70)

btn = Button(tk, height = 5, width = 20, text = 'посчитать', command
= click) btn.place(x=5, y = 100)

tk.mainloop()
→ Ссылка
Автор решения: Fox Fox

Короче и проще в Tkinter по-моему не бывает:

import tkinter as tk

root = tk.Tk()
root.geometry("400x35")

def validate_input(char): return char.isdigit() or char in "-."
entry_var = tk.StringVar(root)
entry = tk.Entry(root, textvariable=entry_var, validate="key", validatecommand=(root.register(validate_input), '%S'))
entry.grid(row = 0, column = 0, sticky="nwe", padx=5, pady=5)

root.grid_rowconfigure(0, weight=1)
root.grid_columnconfigure(0, weight=1)

root.mainloop()

Примечание: в этом: char in "-." нет "+" и это не обеспечивает ввод чисел, содержащих E, но это можно исправить, добавив эти символы в перечень.

→ Ссылка