Как выполнить проверку поля ввода в tkinter

#python #python-3.x #tkinter

#python #python-3.x #tkinter

Вопрос:

Я хочу, чтобы в моем поле ввода были напечатаны только цифры и знак «.». Но после запуска этого кода я могу вводить только цифры или только знак ‘.’ (Я пытаюсь ввести ‘2.45’, но точка не вводится после ‘2’. Если я попытаюсь ввести ‘.45′, ’45’ не вводится после ‘.’ ). Как я могу решить эту проблему?

 from tkinter import *

root = Tk()
entry = Entry(width=10)
entry.pack()

def correct(inp):
    if inp.isdigit():
        return True
    elif inp == ".":
        return True
    elif inp == "":
        return True
    else:
        return False

reg = root.register(correct)

entry.config(validate='key', validatecommand = (reg, '%P'))

root.mainloop()
  

Ответ №1:

Ваша функция проверки написана правильно … и я думаю, что это был бы более простой способ сделать то, что вы хотите:

 import tkinter as tk

root = tk.Tk()
entry = tk.Entry(width=10)
entry.pack()

def correct(inp):
    """ Determine if inp value is a valid floating point number. """
    try:
        float(inp)
    except ValueError:
        return inp == ''  # Consider empty string valid.
    else:
        return True

reg = root.register(correct)

entry.config(validate='key', validatecommand=(reg, '%P'))

root.mainloop()
  

Комментарии:

1. Большое вам спасибо за ответ. Это работает почти правильно. Единственное, что я не могу удалить последнюю цифру из своего поля ввода

2. Если вы хотите, чтобы пустая строка была принята, вам нужно будет обработать ее как особый случай. Я изменил свой ответ, чтобы сделать это.