Используйте параметр validatecommand
для Entry
.
Некоторые фрагменты кода, чтобы показать, как это работает:
root = tk.Tk()
vcmd = root.register(is_number)
e = ttk.Entry(pressf, justify='right', validate='key', validatecommand=(vcmd, '%P'))
def is_number(data):
"""Validate the contents of an entry widget as a float."""
if data == '':
return True
try:
rv = float(data)
if rv < 0:
return False
except ValueError:
return False
return True
Это в основном вызывает функцию проверки при каждом нажатии клавиши. Только если проверка прошла успешно, символ добавляется в запись.
Вы можете найти полный рабочий пример здесь .
Редактировать
Выше приведен «канонический» пример валидатора. Это позволяет или запрещает символы в Entry
.
Но вы также можете использовать его другими способами. Например, вы всегда можете вернуть True
, но, например, изменить цвет текста Entry
на красный, если значение выходит за пределы желаемого.