2016-12-15 7 views
1

У меня есть следующий код. Он работает иногда, это не в другое время.Странное поведение - события wxPython

def OnReset(self, event): 

    self.reset_pump.Disable() # Disables the button so it is clicked 
    self.WriteToController([0x30],'GuiMsgIn') # Sends the reset command 
    self.flag_read.set() 
    self.tr.join() 
    time.sleep(2) 
    start = time.time() 
    self.offset_text_control.Clear() 
    print "Helloin reset" 
    self.gain_text_control.Clear() 
    self.firmware_version_text_control.Clear() 
    self.pump_rpm_text_control.Clear() 
    self.pressure_text_control.Clear() 
    self.last_error_text_control.Clear() 
    self.error_count_text_control.Clear() 
    self.pump_model_text_control.Clear() 
    self.pump_serial_number_text_control.Clear() 
    self.on_time_text_control.Clear() 
    self.job_on_time_text_control.Clear() 

    #self.MessageBox('Pump RESET going on Click OK \n') 
    # Having the above step is useful 
    print time.time() - start 
    #self.ser.close() 
    wx.CallLater(3000, self.CalledAfter, [event,]) 

def CalledAfter(self, event): 
    self.tr = threading.Thread(target=ReadData, name="ReadThread", args=(self.ser, self.flag_read)) 
    self.tr.daemon = True 
    self.tr.start() 
    self.reset_pump.Enable() 

Что она делает это, когда я нажимаю на кнопку сброса на мой GUI, он должен очистить некоторые текстовые поля на GUI. Он должен очистить его, только после присоединения к потоку self.tr.

После того, как он очистится, он выполнит команду wx.CallLater (3000, self.CalledAfter, [event,]). Затем запускается новый поток.

Очевидно, что команда .Clear() работает очень неустойчиво, она работает некоторое время, не работает в другое время и снова работает.

Любая идея, почему это может произойти, будет очень полезно.

+0

Вы уверены, что вызывается Clear(), и программа не задерживается на tr.join()? Я сомневаюсь, что проблема связана с методом Clear и почти гарантирована, связана с ReadData или другим кодом, который здесь не показан. – user2682863

+0

Что вы имеете в виду, будучи вызванным? Если вы имеете в виду, что tr.join блокирует, это не так. Поскольку, если он блокируется, я не смог бы выполнять команды печати, которые у меня есть в коде. –

+0

Что произойдет, если вы вызовете print (self.offset_text_control.GetValue()) непосредственно до и после Clear()? – user2682863

ответ

0

Кажется, что разница в том, как SetValue и Clear обновляют окна. Вызов SetValue("") кажется подходящим обходным путем для такого поведения.