我有一个程序使用ontimer
功能将Turtle图形红绿灯中的颜色从绿色变为黄色再变为红色。这是完整的程序:
import turtle
turtle.setup(400,500)
wn = turtle.Screen()
wn.title("Tess becomes a traffic light!")
wn.bgcolor("lightgreen")
tess = turtle.Turtle()
def draw_housing():
""" Draw a nice housing to hold the traffic lights """
tess.pensize(3)
tess.color("black", "darkgrey")
tess.begin_fill()
tess.forward(80)
tess.left(90)
tess.forward(200)
tess.circle(40, 180)
tess.forward(200)
tess.left(90)
tess.end_fill()
draw_housing()
tess.penup()
tess.forward(40)
tess.left(90)
tess.forward(50)
tess.shape("circle")
tess.shapesize(3)
tess.fillcolor("green")
state_num = 0
def advance_state_machine():
global state_num
wn.ontimer(advance_state_machine, 2000)
if state_num == 0:
tess.forward(70)
tess.fillcolor("orange")
state_num = 1
elif state_num == 1:
tess.forward(70)
tess.fillcolor("red")
state_num = 2
else:
tess.back(140)
tess.fillcolor("green")
state_num = 0
advance_state_machine()
wn.mainloop()
但是,现在,我想做的事情基本相同,但是使用hideturtle
和showturtle
。我完全摆脱了advance_state_machine
功能。取而代之的是,在draw_housing()
之后开始:
tess.penup()
tess.hideturtle()
green = turtle.Turtle()
green.pu()
green.forward(40)
green.left(90)
green.forward(50)
green.shape("circle")
green.shapesize(3)
green.fillcolor("green")
yellow = turtle.Turtle()
yellow.pu()
yellow.forward(40)
yellow.left(90)
yellow.forward(50)
yellow.shape("circle")
yellow.shapesize(3)
yellow.forward(70)
yellow.fillcolor("orange")
red = turtle.Turtle()
red.pu()
red.forward(40)
red.left(90)
red.forward(190)
red.shape("circle")
red.shapesize(3)
red.fillcolor("red")
基本上,我试图创建一种方法来循环隐藏并单独显示每只乌龟来模仿我的第一个程序。我可以手写代码来隐藏并将定时器上的每只乌龟显示为无限远,但我宁愿它自己继续!此外,是否有任何简单的方法使它成为当一个灯是" on"时,另外两个是" off",表示为更暗/灰色的颜色,而不是乌龟完全消失了?在此先感谢您的帮助/建议。