2013-04-13 3 views
0

Я пытаюсь создать графический интерфейс в wxPython. У меня есть два TextCtrls. Предположим, что они first_index_input и last_index_input, и они управляют model.f_i и model.l_i, соответственно. Есть условие: для правильного выполнения модели model.f_i должно быть < = model.l_i. Поэтому содержание first_index_input должно быть < = last_index_input.Как обрабатывать wxPython TextCtrls, которые влияют на содержимое друг друга

Так что я хочу сделать, это исправить, так что: 1) если пользователь вводит значение в first_index_input, которое больше, чем значение в last_index_input (установленной в предыдущем случае использования или что-то), то last_index_input и model.l_i оба будут быть установленным на новый first_index_input. 2) Если пользователь вводит last_index_input, который меньше first_index_input, то last_index_input будет исправлен снова и будет установлен равным first_index_input.

Так что же такого сложно? Речь идет о том, какое событие можно отследить. Предположим, что у first_index_input есть контент «145», и я (правильно) хочу дать last_index_input вход 10324. Если этот виджет отменит событие wx.EVT_TEXT, то он не будет ждать, пока я наберу «10324». Как только он видит «1» (т. Е. Первую цифру), он угасает и говорит: «НЕТ! Это меньше first_index_input» и «исправляет» мою ввод. С другой стороны, я могу избавиться от этого, отменив команду wx.EVT_TEXT_ENTER, и все работает нормально , пока я помню, чтобы нанести ответный удар после ввода моего значения, и я никогда не помню, чтобы он возвращался, поэтому я уверен мои пользователи тоже не будут.

Есть ли другой способ сделать это? Возможно, какое-то другое событие, которое доступно? Благодарю.

ответ

1

Я бы использовал EVT_TEXT вместе с wx.Timer. Идея здесь заключается в том, чтобы отслеживать, сколько времени прошло с тех пор, как пользователь в последний раз набрал что-то в этом втором контроле. Таким образом, вы получите начальное значение нуля (self.start_value), и каждый раз, когда срабатывает EVT_TEXT, вы сбросите это значение и перезапустите таймер. Когда событие EVT_TIMER будет запущено, оно увеличит начальное значение. Вам нужно будет поместить инструкцию if if в обработчик события таймера, который проверяет, превышает ли начальное значение значение X секунд. Если да, то сделайте проверку, чтобы увидеть, если первый вход, если он меньше второго и действует соответственно. Удостоверьтесь, что вы остановите таймер, если он работает, когда объект таймера запуска может повесить приложение, когда вы его закрываете.

Вот ссылка на таймерами: http://www.blog.pythonlibrary.org/2009/08/25/wxpython-using-wx-timers/

+0

Майк, отлично работает! Благодаря! –

Смежные вопросы