设置系统时钟停止循环

问题描述:

我已经编写了一个运行在Raspberry Pi 3 Model B上的Python 3程序。它使用Tkinter并使用执行SPI通信的root.after具有非阻塞重复功能。我的问题是,即使设置系统时间一分钟,也会导致该功能停止重复。再次设置时钟使其再次开始工作。我简单的问题下面的程序:设置系统时钟停止循环

import tkinter as tk 
from tkinter import * 

def MyLoop(): 
    print ("Hello") 
    root.after(1000, MyLoop) 

root = tk.Tk() 

root.after(200, MyLoop)    # Start the non-blocking loop. 

root.mainloop()      #Start the GUI loop. 

如果我把时钟拨回使用sudo日期--set = “YYYY-MM-DD HH:MM:SS” 停止印刷 “你好”。如果我再次设置时钟,它将再次开始打印“Hello”

问题不在于Raspberry Pi,因为我在Microsoft Windows上获得相同的行为。

我通常可以通过在*和其他地方搜索来找到问题的解决方案,但是这个问题让我陷入困境。任何帮助,将不胜感激。

+0

你为什么改变时钟? – cdarke

它停止,因为tkinter使用当前时间调用after来计算绝对未来时间。当你设置时钟回来时,你必须等到这个将来的时间才能让你的函数运行。

例如,如果在中午12:00您的电话号码after运行,下次调用该函数将是12:00:01。如果您将时钟重新设置为11:00,则在再次运行之前,您必须等待一小时一秒。