Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 有Tkinter';s after()按调用的时间顺序返回输出_Python_Logging_Tkinter - Fatal编程技术网

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文本小部件。您能提供一个