线程Timer .cancel程序关闭

时间:2015-09-14 15:13:09

标签: python multithreading wxpython

我有一个线程计时器,每60秒运行一次函数并将字符串打印到文本框

def devPresent(self):
    stdout = self.deviceExists()
    exists = self.exactMatch(stdout, "device")
    if "device" in str(exists):
        self.progressBox.AppendText('TEST STILL HERE\n')
    else: 
        self.progressBox.AppendText('Device connection lost\n')
        self.rstBtn()
    t = threading.Timer(60, self.devPresent)
    t.start()

所以这个工作并且TEST STILL HERE会打印到progressBox,但是当我用下面的def关闭窗口时,它关闭了主窗口,但是另一个窗口弹出并冻结。

 def closeWindow(self,e):
    t = self.devPresent
    t.cancel()
    time.sleep(3)
    self.Destroy()

我是否错误地关闭了帖子?

1 个答案:

答案 0 :(得分:0)

t won't be visible between class methods unless you make it an attribute of self. Try:

def devPresent(self):
    stdout = self.deviceExists()
    exists = self.exactMatch(stdout, "device")
    if "device" in str(exists):
        self.progressBox.AppendText('TEST STILL HERE\n')
    else: 
        self.progressBox.AppendText('Device connection lost\n')
        self.rstBtn()
    self.t = threading.Timer(60, self.devPresent)
    self.t.start()


 def closeWindow(self,e):
    self.t.cancel()
    time.sleep(3)
    self.Destroy()
相关问题