2017-06-16 44 views
-1

我正在編寫一個程序來記錄一些測量結果。爲了記錄每一秒鐘,我在記錄功能log()的末尾使用after()來記憶它。這是否創建一個遞歸,因此不按時間順序返回日誌? (每秒打印超過1個日誌)如何確保每個條目的時間順序爲每秒1個日誌?讓Tkinter的after()按照時間順序返回輸出

下面是一些我的代碼:

def log(self): 

    if self.running ==True: 

     self.current_date = time.strftime("%Y-%m-%d") 
     now = datetime.datetime.now() 
     self.current_time = datetime.time(now.hour, now.minute, now.second) 

     if self.boolvars[0].get() == True: 
      self.t = self.t + str(self.current_date) + ", " 
     if self.boolvars[1].get() == True: 
      self.t = self.t + str(self.current_time) + ", " 
     if self.boolvars[2].get() == True: 
      self.t = self.t + str(self.mic.VacGetPressure(0)) + ", " 
      self.champres.append(str(self.mic.VacGetPressure(0))) 
     if self.boolvars[3].get() == True: 

     ... 
     ... 
     ... 

     self.screen.insert(INSERT, self.t) 
     self.parent.after(1000,self.log) 

下面是一些示例輸出:

2017-06-16, 13:18:37, 0.001, 
2017-06-16, 13:18:36, 0.001, 
2017-06-16, 13:18:36, 0.001, 
2017-06-16, 13:18:36, 0.001, 
2017-06-16, 13:18:37, 0.001, 
2017-06-16, 13:18:37, 0.001, 
2017-06-16, 13:18:37, 0.001, 
2017-06-16, 13:18:36, 0.001, 
2017-06-16, 13:18:36, 0.001, 
2017-06-16, 13:18:36, 0.001, 
2017-06-16, 13:18:37, 0.001, 
2017-06-16, 13:18:37, 0.001, 
2017-06-16, 13:18:37, 0.001, 
2017-06-16, 13:18:38, 0.001, 
2017-06-16, 13:18:36, 0.001, 
2017-06-16, 13:18:36, 0.001, 
2017-06-16, 13:18:36, 0.001, 
2017-06-16, 13:18:37, 0.001, 

在第二列中,清楚地記錄正在發生超過每秒一次,並且沒有被按時間順序返回。 對after()的任何解釋將會有所幫助,並且如果我需要將其從log()中移出或放在何處。

在此先感謝。

+0

您是否在使用線程? ''之後'不是遞歸的。並將始終按順序執行項目。 –

+0

'self.screen.insert(INSERT,self.t)'調用中的INSERT是什麼?如果'self.screen'是一個'list',那麼'insert'方法的調用序列可能是錯誤的。 – martineau

+0

我願意賭'self.screen'是一個tkinter文本小部件。 –

回答

0

這個問題比我做得更簡單(在完全調查我自己的代碼之前,學習了關於發佈溢出的快速教程)。每次撥打log()時,我都沒有將self.t重置爲空字符串。再次感謝您的答案。

0

這是創建一個遞歸,因此不按時間順序返回日誌?

否。after的更好名稱應該是add_job_to_queue。它不會進行遞歸調用,它只是將一個函數添加到隊列中。 Tkinter會定期處理該隊列,關閉功能並調用它們。

在調用self.log()一次之後,隊列將只有一個項目。當tkinter處理隊列時,它會關閉該項並運行它。在運行過程中,新的作業被添加到隊列中。然後tkinter會從隊列中彈出,然後添加一個新的。等等。隊列永遠不會比一個大。

你描述的行爲聽起來像是你正在啓動多個調用self.log()的「循環」,和/或你正在使用線程。