如何使用tkinter设置要在特定时间执行的命令

时间:2019-05-07 09:39:37

标签: tkinter time python-3.7

我正在使用Python编写计时器程序。我最终想在Raspberry Pi上运行它。这是一项称为'Flyball'的狗运动。 目前,我的程序使用秒表类以秒为单位显示时间,精确到小数点后3位。我可以使用'lap'按钮来触发一个事件,该事件将显示按下单圈按钮时的单圈时间。

我想做的是运行“拖曳的灯光树” 。当我按“开始”时,计时器开始于-6.0秒。我的GUI上有灯光图像,我希望它们在设定的时间触发:-

-3.0sec, 1st amber light on.
-2.0sec, 2nd amber light on.
-1.0sec, 3rd amber light on.
0.0sec, Green light on.

如果我可以解决这个问题,那么在灯光亮起时还可以发出哔哔声的工作就不多了。

我认为我需要某种形式的循环以保持检查当前的秒表时间并将其与设置的时间(如-3.0)进行比较。 有人可以给我有关如何做这样的建议吗?预先谢谢你。

我可以自己运行灯树。我使用time.sleep()隔开了光定时(相隔1秒),当它们全部点亮时将它们打开3秒钟,然后再次关闭。 我通过使用itemconfig(state ='normal')或itemconfig(state ='hidden')来做到这一点 我也使用tk.after()得到了相同的结果。

如果我在定时器运行时尝试运行此拖动树,由于睡眠功能,定时器显示将停止更新。 如果我再次使用tk.after()尝试此操作,则将显示第一个指示灯,但是除非我在计时器上按“停止”,否则其余序列将无法完成。

我尝试使用if nextTime == -3.0类型的条件来在命令提示符下触发简单的打印语句,但是什么也没有出现。

此代码段是秒表类中的Updater函数。它是更新屏幕上显示的时间的时间。我可以使用self.timer变量来触发灯光吗?

def更新程序(自己):

self.totalTime = time.time() - self.startTime       
self.SetTime(self.totalTime)
self.timer = self.after(1,self.Updater)

1 个答案:

答案 0 :(得分:1)

您不能使用$xml = simplexml_load_string($xml_contents); foreach ($xml->children() as $key => $child) { $title = $child->item->attributes()['title']; // will be null $published = $child->item->attributes()['published']; // will be TRUE } ,因为它完全按照说的去做:它会使整个程序进入休眠状态。取而代之的是,tkinter窗口小部件具有一种称为sleep的方法,该方法可以在将来用于运行函数。

在下面的示例中,我创建了一个函数,该函数以一秒钟的间隔打印“哔”一声,然后打印“ GO”。

after方法接受以毫秒为单位的时间,可调用的时间(例如:对函数的引用)以及要传递给该函数的零个或多个参数。

after

重要的是要意识到对def start_tree(): print("beep") root.after(1000, print, "beep") root.after(2000, print, "beep") root.after(3000, print, "GO!") 的调用会立即返回。它不会等待功能运行。它只是将命令放入队列中,以便tkinter在时间过去后尽快运行。