Python 交通灯模拟器错误

Python 交通灯模拟器错误,python,tkinter,Python,Tkinter,我有一个python的交通灯模拟器,它运行正常,但是在第一次运行之后它刚刚结束,我需要它在一个循环上,例如红-黄-绿,然后再红-黄-绿等等..我在这里缺少什么?我是python新手,如果这是一个noob问题,请不要报告 下面是我的代码: import time from time import sleep from tkinter import * tk=Tk() win=Canvas(tk, width=55, height=200) win.pack() #functions def red

我有一个python的交通灯模拟器,它运行正常,但是在第一次运行之后它刚刚结束,我需要它在一个循环上,例如红-黄-绿,然后再红-黄-绿等等..我在这里缺少什么?我是python新手,如果这是一个noob问题,请不要报告 下面是我的代码:

import time
from time import sleep
from tkinter import *
tk=Tk()
win=Canvas(tk, width=55, height=200)
win.pack()
#functions
def red(a):
for i in range(a):
    red=win.create_oval(5,5,50,50, fill="red")
    tk.update()
    time.sleep(0.05)
def redb(a):
for i in range(a):
    red=win.create_oval(5,5,50,50, fill="black")
    tk.update()
    time.sleep(0.05)
def amber(a):
for i in range(a):
    amber=win.create_oval(5,55,50,100, fill="orange")
    tk.update()
    time.sleep(0.05)
def amberb(a):
for i in range(a):
    amber=win.create_oval(5,55,50,100, fill="black")
    tk.update()
    time.sleep(0.05)
def green(a):
for i in range(a):
    green=win.create_oval(5,105,50,150, fill="green")
    tk.update()
    time.sleep(0.05)
def greenb(a):
for i in range(a):
    green=win.create_oval(5,105,50,150, fill="black")
    tk.update()
    time.sleep(0.05)
def lights():
red=win.create_oval(5,5,50,50, fill="black")
amber=win.create_oval(5,55,50,100, fill ="black")
green=win.create_oval(5,105,50,150, fill="black")
#end of functions
#calling the functions

lights()
red(30)
redb(1)
amber(10)
amberb(1)
green(30)
greenb(1)

tk.mainloop()

您需要在灯光变化代码上进行循环:

lights()
while True: # use a better termination condition here
    red(30)
    redb(1)
    amber(10)
    amberb(1)
    green(30)
    greenb(1)
请注意:

for i in range(a):
    amber=win.create_oval(5,55,50,100, fill="black")
    tk.update()
    time.sleep(0.05)
这与:

amber=win.create_oval(5,55,50,100, fill="black")
tk.update()
time.sleep(0.05 * a)

因为for循环只是重新绘制椭圆并休眠0.05秒
a
次。

您需要在灯光更改代码上进行循环:

lights()
while True: # use a better termination condition here
    red(30)
    redb(1)
    amber(10)
    amberb(1)
    green(30)
    greenb(1)
请注意:

for i in range(a):
    amber=win.create_oval(5,55,50,100, fill="black")
    tk.update()
    time.sleep(0.05)
这与:

amber=win.create_oval(5,55,50,100, fill="black")
tk.update()
time.sleep(0.05 * a)

因为for循环只是重新绘制椭圆并休眠0.05秒
a
次。

谢谢,它很有帮助,但是没有发现使用while终止条件有什么问题?
而True
将无限期运行。使用一些用户输入,如按下按钮或键,或者更简单的,在N秒内循环。这个导入时间t_end=time.time()+60*15,而time.time()while True将无限期运行。使用一些用户输入,如按下按钮或键,或者更简单的,在N秒内循环。这个导入时间t_end=time.time()+60*15,而time.time()