我编写了一个在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和其他地方搜索来找到问题的解决方案,但这个问题让我感到困惑。任何帮助将不胜感激。
答案 0 :(得分:0)
它停止,因为tkinter在调用after
时使用当前时间来计算绝对未来时间。当你设置时钟时,你必须等到你的未来时间才能运行。
例如,如果在中午12点正在运行after
,则下次调用该函数时将是12:00:01。如果您将时钟设置回11:00,则必须等待一小时一秒才能再次运行。