Привязка <Key>к входу в Ткинтер - PullRequest
4 голосов
/ 29 августа 2011

Когда я связываю событие с записью и читаю содержимое, изменение как-то отстает. Я хочу «динамически обновить» другую запись, которая показывает результат вычисления содержимого различных записей, как только запись 1 изменяется. Но почему-то изменение не распознается мгновенно, а только предыдущее. Не знаю, если проблема ясна: Если я внесу n изменений, изменения до n-1 будут распознаны. Если бы число было 1000 и я дважды нажал клавишу backspace, entry_1.get () выдаст 100 вместо 10. Надеюсь, вы понимаете, что я имею в виду:)

Фрагмент кода (упрощенный):

self.entry_1.bind('<Key>',lambda d: self.update())

def update(self):
    success=True
    try:
        float(self.entry_1.get())
        float(self.entry_1.get())
    except ValueError: success=False
    if success:

        self.entry_3.delete(0,"end")
        x=(float(self.entry_1.get())*float(self.entry_2.get())
        self.entry_3.insert("end", "%g" %x)

В чем может быть причина этого?

1 Ответ

5 голосов
/ 29 августа 2011

Причина заключается в порядке обработки событий. Этот порядок определяется «тегом привязки» (или тегом привязки) виджета. По умолчанию порядок виджет, класс, toplevel, "все". Например, если у вас есть привязка к виджету, а также к классу и к окну верхнего уровня, содержащему виджет, и к особому случаю «все», привязки будут срабатывать в этом порядке.

Я дал длинную запись этой проблемы в этот ответ на вопрос Как связать собственные события в виджете Tkinter Text после того, как он будет связан с виджетом Text?

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