2016-09-06 1 views
0

У меня есть блок textctrl - я читаю данные из него непрерывно каждые 1 секунду. У меня есть кнопка, которая должна быть включена, когда значение опускается ниже 50. У меня есть фрагмент кода, который делает графический интерфейс безответственным. В коде я представляю здесь, я жду, пока значение не меньше 50. Затем Включение кнопки запускаWXPYTHON tricky

while self.pressure_text_control.GetValue()>50: 
     self.start.Disable() 
     time.sleep(1) 
    self.start.Enable() 

Весь этот код находится внутри события другой кнопки.

def OnDone(self, event): 
     self.WriteToControllerButton([0x04]) 
     self.status_text.SetLabel('PRESSURE CALIBRATION DONE \n DUMP PRESSURE') 
     self.led1.SetBackgroundColour('GREY') 
     self.done.Disable() 
     self.add_pressure.Disable() 
     while self.pressure_text_control.GetValue()>50: 
      self.start.Disable() 
      time.sleep(1) 
     self.start.Enable() 

Значение в pressure_text_control обновляется каждые 1 секунду.

+0

Возможный дубликат [использование time.sleep в wxPython] (http://stackoverflow.com/questions/11377316/using-time-sleep-in-wxpython) – nepix32

ответ

0

Настройте wx.timer, чтобы сделать для вас работу, это освободит основной контур GUI, а это сделает его отзывчивым.
Класс wx.Timer позволяет выполнять код через определенные промежутки времени. https://wxpython.org/Phoenix/docs/html/wx.Timer.html

self.timer = wx.Timer(self) 
    self.Bind(wx.EVT_TIMER, self.OnTimer, self.timer) 
    self.timer.Start(1000) 

def OnTimer(self, event): 
    "Check the value of self.pressure_text_control here and do whatever" 

Не забудьте self.timer.Stop() перед закрытием программы.

+0

Сохраняет ли это значение, пока таймер не будет включен? Как я могу выйти, если значение меньше 50, как мне нужно. Разве self.timer.Start (1000) означает, что он начинается через 1 секунду? И НЕ ЭТО РАБОТАЕТ КАЖДЫЙ 1 ВТОРОЕ –

+0

Я предоставил ссылку, которая объясняет, что делает wx.timer. 'Start (1000)' по сути означает, что он запускается каждую секунду. Так что да, он начинается через 1 секунду, а затем запускается через 1 секунду после этого, пока не остановится. Если вам требуется, чтобы таймер останавливал в любое время выполнение команды 'self.timer.Stop()', как уже упоминалось. Вы всегда можете установить его снова, когда требуется, с помощью 'self.timer.Start (1000)' –