Python: Как получить обновленный текст ввода для использования в команде, связанной с ней?

StackOverflow https://stackoverflow.com/questions/4287553

  •  28-09-2019
  •  | 
  •  

Вопрос

Рассмотрим следующий код:

text = Entry(); text.pack()
def show(e):
    print text.get()
text.bind('<Key>', show)

Допустим, я положил буквы ABC в запись, один за другим. Вывод будет:

>>> 
>>> A
>>> AB

Обратите внимание, что при нажатии A, он печатает пустую строку. Когда я нажимаю B, он печатает A, а не AB. Если я не нажимаю ничего после C, он никогда не будет показан. Похоже, что контент ввода обновляется только после возврата Binded Command, поэтому я не могу использовать фактическое значение записи в этой функции.

Есть ли способ получить обновленное значение ввода, чтобы использовать внутри обязательной команды?

Это было полезно?

Решение

Вы можете заменить <Key> событие с <KeyRelease> мероприятие. Это должно работать.

Вот список событий: http://infohost.nmt.edu/tcc/help/pubs/tkinter/events.html#event-types.

Другие советы

Причина этого связана с TK «BindTags». Привязки связаны с тегами, и привязки обрабатываются в порядке метки. Имена виджетов и классы виджетов - это теги, и они обрабатываются в этом порядке (первое привязки, специфичные виджеты, привязки классов вторым).

По этой причине в любое время вы нажимаете ключ, ваш виджет, специфический привязку, будет огонь до того, как привязка класса имеет шанс изменить виджет.

Есть много обходных путей. Самый простой состоит в том, чтобы связать с <KeyRelease> Поскольку привязки классов случаются на клавише. Существуют иные решения, которые включают в себя либо добавлять, либо переставляющие теги привязки, либо используют встроенные функции проверки данных входного виджета. Что лучше всего, зависит от того, что вы действительно пытаетесь достичь.

Для получения дополнительной информации о функциях проверки данных см. В этом вопросе: Интерактивно подтверждающий контент въезда в Tkinter

Для более полного ответа см. Tkinter: установите Stringvar послеu003CKey> событие, включая нажатый ключ

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top