设置系统时钟停止循环

时间:2016-04-26 15:45:59

标签: python tkinter raspberry-pi

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

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 date设置时钟--set =“YYYY-MM-DD HH:MM:SS”则停止打印“Hello”。如果我再次设置时钟,则再次开始打印“Hello”

问题不在于Raspberry Pi,因为我在Microsoft Windows上遇到了相同的行为。

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

1 个答案:

答案 0 :(得分:0)

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

例如,如果在中午12点正在运行after,则下次调用该函数时将是12:00:01。如果您将时钟设置回11:00,则必须等待一小时一秒才能再次运行。