Search code examples
pythonturtle-graphicspython-turtle

How can I change the size of my python turtle window?


I am currently trying to draw a Mandelbrot set in python with turtle. However, my problem has nothing to do with the Mandelbrot. I can't change the size of my turtle window. How can I do that?

I tried to initialize a screen and set the screen size with the screensize method. Nothing changes if I do this.

This is my code for drawing the set. I pasted the whole code because I don't know what I did wrong that the screen size doesn't change.

from turtle import *


height = 360
width = 360
screen = Screen()
screen.screensize(width, height)


tu = Turtle()
tu.hideturtle()
tu.speed(0)
tu.penup()


def decreasePoint(n, start1, stop1, start2, stop2):
    return ((n - start1) / (stop1 - start1)) * (stop2 - start2) + start2


for x in range(width):
    for y in range(height):

        a = decreasePoint(x, 0, width, -2, 2)
        b = decreasePoint(y, 0, height, -2, 2)
        ca = a
        cb = b

        n = 0
        z = 0
        while n < 100:
            aa = a * a - b * b
            bb = 2 * a * b

            a = aa + ca
            b = bb + cb
            n += 1

            if abs(a + b) > 16:
                break
        bright = 'pink'
        if (n == 100):
            bright = 'black'

        tu.goto(x , y)
        tu.pendown()
        tu.dot(4, bright)
        tu.penup()
done()

Solution

  • Instead of:

    screen.screensize(width, height)
    

    do:

    screen.setup(width, height)
    

    The screensize() method sets the amount of area the turtle can roam, but doesn't change the screen size (despite the name), just the scrollable area. Also, to simplify your code, speed it up and produce a more detailed result, I suggest the following rework:

    from turtle import Screen, Turtle
    
    WIDTH, HEIGHT = 360, 360
    
    screen = Screen()
    screen.setup(WIDTH + 4, HEIGHT + 8)  # fudge factors due to window borders & title bar
    screen.setworldcoordinates(0, 0, WIDTH, HEIGHT)
    
    turtle = Turtle()
    turtle.hideturtle()
    turtle.penup()
    
    def scalePoint(n, start1, stop1, start2, stop2):
        return (n - start1) * (stop2 - start2) / (stop1 - start1)  + start2
    
    screen.tracer(False)
    
    for x in range(WIDTH):
        real = scalePoint(x, 0, WIDTH, -2, 2)
    
        for y in range(HEIGHT):
    
            imaginary = scalePoint(y, 0, HEIGHT, -2, 2)
    
            c = complex(real, imaginary)
    
            z = 0j
    
            color = 'pink'
    
            for _ in range(100):
                if abs(z) >= 16.0:
                    break
    
                z = z * z + c
            else:
                color = 'black'
    
            turtle.goto(x, y)
            turtle.dot(2, color)
    
        screen.update()
    
    screen.tracer(True)
    screen.exitonclick()