Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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()
like image 432
Nils Walker Avatar asked Jun 10 '19 14:06

Nils Walker


1 Answers

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(1, color)

    screen.update()

screen.tracer(True)
screen.exitonclick()
like image 132
cdlane Avatar answered Sep 20 '22 21:09

cdlane