奇怪的行为 - wxPython事件

问题描述:

我有以下这段代码。它有时在工作,而不是在其他时间。奇怪的行为 - 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

如果您在Clear()之前和之后立即调用print(self.offset_text_control.GetValue()),会发生什么? – user2682863

SetValue和Clear更新窗口的方式似乎有所不同。调用SetValue("")似乎是适合此行为的解决方法。