Global variables in function object

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • c0d3rX
    New Member
    • Nov 2018
    • 7

    Global variables in function object

    The following code is from the turtle graphics demos. The program is a color mixer and allows the user to change the background color of the window using three turtle sliders.

    Under the function definition "main" there are three global variables defined ("screen", "red", and "blue").

    I'm trying to understand the purpose of defining these variables as global within the function definition.

    Code:
    from turtle import Screen, Turtle, mainloop
    
    class ColorTurtle(Turtle):
    
        def __init__(self, x, y):
            Turtle.__init__(self)
            self.shape("turtle")
            self.resizemode("user")
            self.shapesize(3,3,5)
            self.pensize(10)
            self._color = [0,0,0]
            self.x = x
            self._color[x] = y
            self.color(self._color)
            self.speed(0)
            self.left(90)
            self.pu()
            self.goto(x,0)
            self.pd()
            self.sety(1)
            self.pu()
            self.sety(y)
            self.pencolor("gray25")
            self.ondrag(self.shift)
    
        def shift(self, x, y):
            self.sety(max(0,min(y,1)))
            self._color[self.x] = self.ycor()
            self.fillcolor(self._color)
            setbgcolor()
    
    def setbgcolor():
        screen.bgcolor(red.ycor(), green.ycor(), blue.ycor())
    
    def main():
        global screen, red, green, blue
        screen = Screen()
        screen.delay(0)
        screen.setworldcoordinates(-1, -0.3, 3, 1.3)
    
        red = ColorTurtle(0, .5)
        green = ColorTurtle(1, .5)
        blue = ColorTurtle(2, .5)
        setbgcolor()
    
        writer = Turtle()
        writer.ht()
        writer.pu()
        writer.goto(1,1.15)
        writer.write("DRAG!",align="center",font=("Arial",30,("bold","italic")))
        return "EVENTLOOP"
    
    if __name__ == "__main__":
        msg = main()
        print(msg)
        mainloop()
Working...