#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. Если вы хотите, чтобы пустая строка была принята, вам нужно будет обработать ее как особый случай. Я изменил свой ответ, чтобы сделать это.