设置系统时钟停止循环

2024-03-29 15:32:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经编写了一个python3程序,它运行在raspberrypi3model B上。它使用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”。如果我把时钟再往前拨,它又开始打印“你好”

问题不在于Raspberry Pi,因为我在microsoftwindows上也有同样的行为。你知道吗

我通常可以通过在stackoverflow和其他地方搜索来找到问题的解决方案,但这一个让我卡住了。任何帮助都将不胜感激。你知道吗


Tags: the函数import程序loophellotkinterroot
1条回答
网友
1楼 · 发布于 2024-03-29 15:32:00

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

例如,如果在中午12:00运行对after的调用,那么下次调用函数的时间将是12:00:01。如果你把钟拨回11点,你得等一个小时一秒,钟才能再响。你知道吗

相关问题 更多 >