2015-09-14 86 views
0

我不過運行函數中的每條60秒,打印字符串文本框線程定時器.cancel

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() 

所以此工程和測試仍然在這裏被打印到progressBox,一個線程計時器當我用下面的def關閉窗口時,它會關閉主窗口,但另一個窗口會彈出並凍結。

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

我錯誤地關閉了線程嗎?

+0

奇怪的是,我期望這會給'NameError',因爲't'不應該在'devPresent'之外的任何地方可見。 – Kevin

+0

是啊,我明白,但不知道如何正確調用它,我嘗試了一些東西,但每次都收到錯誤。這是最接近t.cancel() – number12

回答

0

t在類方法之間將不可見,除非將其設置爲self的屬性。嘗試:

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() 
+0

謝謝,這是可行的,但程序仍然凍結時調用closeWindow,如果我完全刪除所有線程的東西,它會恢復正常工作。 – number12