Python Turtle mainloop() usage
Question: I have the following code from an [online
tutorial](http://openbookproject.net/thinkcs/python/english3e/events.html#an-
example-state-machines) to learn event-based programming by making a stop
light that changes state when the mouse is clicked. Here is the entirety of my
code:

    
    
    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():
        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(40)
    tess.shape("circle")
    tess.shapesize(3)
    tess.fillcolor("green")
    
    state_num = 0
    
    def nextFSMstate():
        global state_num
        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
    
    wn.onkey(nextFSMstate, "space")
    wn.listen()
    turtle.mainloop()
        # example says wn.mainloop() but I get error. This works though
    

In the tutorial, they use:

    
    
    wn.mainloop()
    

But I get the error:

    
    
    File "stopLights.py", line 51, in <module>
        wn.mainloop()
    AttributeError: '_Screen' object has no attribute 'mainloop'
    

and have to use

    
    
    turtle.mainloop()
    

Why the difference? I am using Python 2.7 in Ubuntu; the example is in
PyScripter. Thanks in advance.


Answer: It appears to be an error in the tutorial.

On line 4, they define `wn = turtle.Screen()`, which means that the later call
to `wn.mainloop()` is equivalent to calling `turtle.Screen().mainloop()`.

This doesn't make any sense; as the error message states there is no
`.mainloop()` method of `turtle.Screen()`. There _is_ , however a
`.mainloop()` method of the base `turtle` object, which is why calling that
works.

