2016-12-16 51 views
0

我目前正在研究一个Python 3.x项目,我应该用交通信号灯做一个简单的十字路口模拟等。我现在唯一的问题是,我不知道任何测量时间的方法,以便使用它来相应地改变交通信号灯。有没有什么办法可以创建一个虚拟计时器,一旦模拟开始,虚拟计时器就会立即开始,并在窗口关闭之前无限期地进行。我正在考虑使用time或timeit模块,但我在这里有点失落。计时器在交通灯模拟

在此先感谢。

+0

[是](https://docs.python.org/3.6/library/time.html)。你可以先用'time.time()'或'time.clock()'得到初始时间,然后通过在窗口关闭之前调用两者之一来计算当前模拟时间 – pbreach

+1

@pbreach为什么不把它作为一个女人?仅仅作为评论就太好了。 – MeanGreen

+0

因为这是[重复](http://stackoverflow.com/questions/415511/how-to-get-current-time-in-python),[重复](http://stackoverflow.com/ (http://stackoverflow.com/questions/3620943/measuring-elapsed-time-with-the-time-module)的问题/ 7370801 /测量时间在python中)你明白了。 – pbreach

回答

1

由于您包含标签tkinter,因此tkinter特定的解决方案效果很好。您可以使用每个小部件上可用的after方法来安排将来发生的事件。

在最简单的情况下,你可以有一个函数在给定的时间间隔内运行其他函数。例如:

import tkinter as tk 

def run_periodically(func, ms): 
    func() 
    root.after(ms, run_periodically, func, ms) 

def tick(): 
    global count 
    count += 1 
    tick_label.configure(text="count: %d" % count) 


count = 0 
root = tk.Tk() 
tick_label = tk.Label(root, text="") 
tick_label.pack(padx=20, pady=20) 

run_periodically(tick, 1000) 

root.mainloop() 

当然,您可以根据需要安排任务,而不是按计划调用某些内容。例如,当灯变成红色时,您可以使用after将其关闭并打开绿灯。然后,您可以使用after将绿色关闭,并将黄色打开,依此类推。由于这听起来像是一项家庭作业,我不会举例说明。

+0

非常感谢,这正是我一直在寻找的! – Jonnyolsen1