Python 有Tkinter';s after()按调用的时间顺序返回输出
我正在写一个程序来记录一些测量结果。为了每秒记录日志,我在日志函数Python 有Tkinter';s after()按调用的时间顺序返回输出,python,logging,tkinter,Python,Logging,Tkinter,我正在写一个程序来记录一些测量结果。为了每秒记录日志,我在日志函数log()的末尾使用after()调用它。这是否会创建递归,因此不会按时间顺序返回日志?(每秒打印超过1个日志)如何确保每个条目按时间顺序排列,每秒打印1个日志 以下是我的一些代码: def log(self): if self.running ==True: self.current_date = time.strftime("%Y-%m-%d") now = datetime.da
log()
的末尾使用after()
调用它。这是否会创建递归,因此不会按时间顺序返回日志?(每秒打印超过1个日志)如何确保每个条目按时间顺序排列,每秒打印1个日志
以下是我的一些代码:
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-1613:18:370.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,
在第二列中,很明显,日志记录每秒发生不止一次,并且没有按时间顺序返回。
如果我需要将从log()
中移出,或将其放在何处,那么对after()
的任何解释都会很有帮助
提前谢谢
这是否会创建递归,因此不会按时间顺序返回日志
不。在
之后的更好的名称应该是将作业添加到队列
。它不进行递归调用,只是向队列中添加一个函数。Tkinter将定期处理该队列,提取函数并调用它们
调用一次self.log()
后,队列上将只包含一个项目。当tkinter处理队列时,它将弹出项目并运行它。在运行期间,将向队列中添加一个新作业。然后tkinter会将其从队列中弹出,然后添加一个新的。等等队列永远不会超过一个
您描述的行为听起来像是在启动多个调用self.log()
的“循环”,和/或使用线程 这个问题比我做的要简单得多(在全面研究我自己的代码之前,我学到了在溢出时发布到fast的经验)。我没有在每次调用log()
时将self.t
重置为空字符串。再次感谢您的回答。您正在使用线程吗<在
之后的code>不是递归的。并且将始终按顺序执行项目。在self.screen.INSERT(INSERT,self.t)
调用中,什么是INSERT
?如果self.screen
是一个list
,那么它的insert
方法的调用顺序可能是错误的。我愿意打赌self.screen
是一个tkinter文本小部件。您能提供一个