【问题标题】:Timer in a traffic light simulation [duplicate]红绿灯模拟中的计时器[重复]
【发布时间】:2017-05-02 09:29:18
【问题描述】:

我目前正在做一个 Python 3.x 项目,我应该用交通信号灯等做一个简单的十字路口模拟。我现在唯一的问题是我不知道有什么方法可以测量时间,所以用它来相应地改变交通信号灯。有什么方法可以创建一个虚拟计时器,它会在模拟开始后立即开始并无限持续直到窗口关闭?我正在考虑使用 time 或 timeit 模块,但在这里我有点迷失了。

提前致谢。

【问题讨论】:

  • Yes。您可以先使用time.time()time.clock() 获取初始时间,然后在窗口关闭前调用两者中的任何一个来计算当前模拟时间
  • @pbreach 为什么不将其添加为分析器?只是评论太好了。
  • 因为这是duplicateduplicateduplicate...你懂的。
  • 感谢大家的意见!我尝试使用它们,但下面的另一个答案更适合我。

标签: python time tkinter tkinter-canvas timeit


【解决方案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 关闭绿色并打开黄色,依此类推。由于这听起来像是一项家庭作业,因此我不会提供示例。

【讨论】:

  • 非常感谢,这正是我一直在寻找的!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-01
  • 1970-01-01
  • 2019-02-08
相关资源
最近更新 更多