Проверка ввода текста Python tkInter - PullRequest
1 голос
/ 19 июня 2009

Я пытаюсь проверить ввод текста с помощью Python / tkInter

def validate_text():
    return False


text = Entry(textframe, validate="focusout", validatecommand=validate_text)

где validate_text - это функция - я всегда пытался вернуть False и всегда возвращать True, и в результате нет разницы ..? Есть ли в функции набор аргументов, которые мне нужно включить?

Редактировать - изменено с НЕТ на фокусировку ... все еще не работает

Ответы [ 4 ]

2 голосов
/ 03 августа 2012

Я думаю, единственное, что вам не хватает, - это неверная команда (или 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

1 голос
/ 12 июня 2018

Вы должны зарегистрировать свою функцию проверки.

def validate_text():
    return False

textframe.register(validate_text)
text = Entry(textframe, validate="focusout", validatecommand=validate_text)
1 голос
/ 12 февраля 2012

focusout означает, что команда validate будет вызываться только тогда, когда вы убираете фокус из виджета entry.

Вы можете попробовать «ключ» для проверки при вводе.

Руководство по Tcl:
Проверка выполняется путем установки опции validateCommand для сценария, который будет оцениваться в соответствии с параметром validate следующим образом:

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

  • фокус
    validateCommand будет вызываться, когда запись получает или теряет фокус.

  • focusin
    validateCommand будет вызываться, когда запись получает фокус.

  • focusout
    validateCommand будет вызываться, когда запись теряет фокус.

  • ключ
    validateCommand будет вызываться при редактировании записи.

  • все
    validateCommand будет вызываться для всех вышеперечисленных условий.

0 голосов
/ 19 июня 2009

"Обратите внимание, что эта опция [validatecommand] используется только в том случае, если опция validate не NONE"

С http://effbot.org/tkinterbook/entry.htm#entry.Entry.config-method

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...