Я думаю, единственное, что вам не хватает, - это неверная команда (или invcmd) . Что вы ожидаете от validatecommand (или vcmd), если она вернет false? Согласно Руководству по Tk (см. Ниже), если vcmd возвращает False и validate имеет значение not , установленное в none, тогда будет вызываться invcmd. Типичная команда для invcmd - Tkinter.bell, которая издает динговый звук. Также обратите внимание, что vcmd и invcmd очень touchy и превратят валидацию в 'none', если они встретят исключение, если виджет каким-либо образом изменяется внутри функций vcmd или invcmd или если vcmd не возвращает действительный логический Tcl. В частности, textvariable печально известна тем, что вызывает проблемы, и раздел в Entry под названием valdation специально решает эту проблему.
Вот соответствующие части из Tk Command Entry (то же самое для Spinbox). Смотрите ниже для получения дополнительной ссылки.
Имя командной строки: -validatecommand или -vcmd
Имя базы данных: validateCommand
Класс базы данных: ValidateCommand
Указывает скрипт для оценки, когда вы хотите проверить ввод в виджет ввода. Установка {} отключает эту функцию (по умолчанию). Эта команда должна возвращать допустимое логическое значение Tcl. Если он возвращает 0 (или действительный логический эквивалент Tcl), то это означает, что вы отклоняете новую редакцию, и это не произойдет, и invalidCommand будет оценен, если он установлен. Если он возвращает 1, то происходит новая редакция. См. Валидацию ниже для получения дополнительной информации.
Имя командной строки: -invalidcommand или -invcmd
Имя базы данных: invalidCommand
Класс базы данных: InvalidCommand
Определяет сценарий для eval, когда validateCommand возвращает 0. Установка его в {} отключает эту функцию (по умолчанию). Лучшее использование этого параметра - установить его на звонок. См. Валидацию ниже для получения дополнительной информации.
Посмотрите этот SO-ответ , Tk команды и epydoc-Tkinter для получения дополнительных ссылок.
В этом вопросе так много дубликатов.
Python tkInter Веселье на вход
Ограничение значения в виджете Tkinter Entry