GUI란?
- Graphical User Interface
터틀은, 등에 펜을 가지고 그림을 그리며 기어가는 거북이라 생각하면 된다.
from turtle import Turtle, Screen # 대문자 주의
timmy_the_turtle = Turtle()
timmy_the_turtle.shape("turtle") # 거북이로 모양을 바꾼다.
timmy_the_turtle.color("red") # 색을 변경함. color 안에는 Tk색을 입력할 수 있다. (Tkinter)
timmy_the_turtle.forward(100) # 100만큼 앞으로 간다
timmy_the_turtle.right(90) # 거북이 시점, 90도 만큼 오른쪽으로 돈다.
screen = Screen()
screen.exitonclick() # 클릭시 창이 사라짐
- 프로그래머들이 위 터틀 그래픽과 같은 모듈 또는 패키지의 사용법을 알아내는 방법은 공식 문서를 이용하는 것이다. (turtle graphic documentation)
- 혹은 스택오버플로(stack overflow)에 검색을 해본다. changing the turtle shape.stackoverflow를 구글에 검색하면 정확한 결과가 나올 수도 있음.
from turtle import Turtle, Screen
timmy_the_turtle = Turtle()
for _ in range(4):
timmy_the_turtle.forward(100)
timmy_the_turtle.left(90)
screen = Screen()
screen.exitonclick()
// 사용 횟수가 적다면 이렇게 사용
import turtle
tim = turtle.Turtle()
// 사용 횟수가 많다면 이렇게 사용
from turtle import Turtle
tim = Turtle()
tom = Turtle()
// 모든 것을 임포트 할 수 있다. 하지만 이 것은 굉장히 혼란스럽게 만드는데,
// 에디에서 온 것인지, 어떤 모듈이 이 기능을 포함하는지 알 수가 없다.
from turtle import *
from random import *
// 우리가 이름을 짧게 지정할 수 있다.
import turtle as t
tim = t.Turtle()


빨간색 전구를 누르면, 패키지를 설치할 수 있다.
import turtle as t
from turtle import Screen
tim = t.Turtle()
for _ in range(15):
tim.forward(10)
tim.penup()
tim.forward(10)
tim.pendown()
screen = Screen()
screen.exitonclick()

10칸 앞으로 가고, 팬 업 한다음 다시 10칸 앞으로 가고 팬 다운을 하여, 점선이 그려지게 된다.
Draw a triangle, square, pentagon, hexagon, heptagon, octagon, nonagon and decagon
- 각 변의 길이는 100이어야 한다.
import turtle as t
import random
tim = t.Turtle()
colours = ["CornflowerBlue", "DarkOrchid", "IndianRed", "DeepSkyBlue", "LightSeaGreen", "wheat", "SlateGray",
"SeaGreen"]
# 그리기 위한 정의
def draw_shape(num_sides):
angle = 360 / num_sides
for _ in range(num_sides):
tim.forward(100)
tim.right(angle)
for shape_side_n in range(3, 10):
tim.color(random.choice(colours))
draw_shape(shape_side_n)

30만큼 가야 한다.
방향은 상하좌우 무작위로 제작한다.
import turtle as t
from turtle import Screen
import random
from typing import Set
tim = t.Turtle()
colours = ["CornflowerBlue", "DarkOrchid", 'IndianRed', "DeepSkyBlue", "LightSeaGreen", "wheat", "SlateGray",
"SeaGreen"]
directions = [0, 90, 180, 270]
tim.pensize(15)
tim.speed("fastest")
for _ in range(200):
tim.color(random.choice(colours))
tim.forward(30)
tim.setheading(random.choice(directions))
screen = Screen()
screen.exitonclick()
Python Tuples: 파이썬의 데이터 타입 중 하나로, 다음과 같이 생겼다.
(1, 3, 8)
내부의 각 아이템은 쉼표로 구분된다.
- 튜플은 수정 하거나, 내부 아이템을 제거 할 수 없다. 이러한 특성을 immutable이라 한다.
- 만약 튜플은 리스트로 변경이 가능하다.
my_tuple = (1, 3, 8)
my_tuple[2] # 8
my_tuple[2] = 12
# Error: 'tuple' object does not support item assignment
list(my_tuple) # [1, 3, 8]
my_tuple # (1, 3, 8)
my_tuple = (2, 4, 6)
my_tuple # (2, 4, 6)
임의의 RGB색상을 생성하는 코드는 다음과 같다.
import turtle as t
from turtle import Screen
import random
tim = t.Turtle()
t.colormode(255) #rgb모드로 변경
def random_color():
r = random.randint(0, 255)
g = random.randint(0, 255)
b = random.randint(0, 255)
random_color = (r, g, b)
return random_color
directions = [0, 90, 180, 270]
tim.pensize(15)
tim.speed("fastest")
for _ in range(200):
tim.color(random_color())
tim.forward(30)
tim.setheading(random.choice(directions))
screen = Screen()
screen.exitonclick()

계속해서 원이 그려지는 모양. (Spirograph)
터틀을 움직여 반지름이 100인 여러 개의 원을 그린다.
import turtle as t
from turtle import Screen
import random
tim = t.Turtle()
t.colormode(255)
def random_color():
r = random.randint(0, 255)
g = random.randint(0, 255)
b = random.randint(0, 255)
color = (r, g, b)
return color
tim.speed("fastest")
def draw_spirograph(size_of_gap):
for _ in range(int(360 / size_of_gap)):
# range는 float를 입력 받을 수 없기에, integer로 바꿔주어야 한다.
tim.color(random_color())
tim.circle(100) # 지름이 100인 원을 그린다.
tim.setheading(tim.heading() + size_of_gap) # 기존 각도 + 돌릴 각도
draw_spirograph(5)
screen = Screen()
screen.exitonclick()

허스트 페인팅을 제작하기 위해서, 원 작품의 색을 추출해야 한다.

해당 그림의 색을 추출하기 위해서, 알맞는 패키지를 설치한다.
[ctrl] + [alt] + [s] 를 한 후, colorgram 패키지를 설치한다.

이렇게 설치를 하면, 외부 패키지 사용이 가능하다.
해당 패키지는, 칼러를 출력하는 패키지이다.

r=, g=, b= 를 따로따로 for 형식으로 만들어서 append한 이유는, 튜플 형식으로 만들기 위해서이다.
이렇게 추출한, rgb값은 허스트 페인팅 2부에서 활용하도록 한다.
위에서 출력한 컬러 리스트를 가지고, 허스트 페인팅을 제작해 본다.
import turtle as turtle_module
import random
turtle_module.colormode(255)
tim = turtle_module.Turtle()
tim.speed("fastest")
tim.penup()
tim.hideturtle() # 터틀 팬 숨기기
color_list = [(202, 164, 109), (238, 240, 245), (150, 75, 49), (223, 201, 135), (52, 93, 124), (172, 154, 40),
(140, 30, 19), (133, 163, 185), (198, 91, 71), (46, 122, 86), (72, 43, 35), (145, 178, 148), (13, 99, 71),
(233, 175, 164), (161, 142, 158), (105, 74, 77), (55, 46, 50), (183, 205, 171), (36, 60, 74),
(18, 86, 90), (81, 148, 129), (148, 17, 20), (14, 70, 64), (30, 68, 100), (107, 127, 153), (174, 94, 97),
(176, 192, 209)]
tim.setheading(225)
tim.forward(300)
tim.setheading(0) # 초기 터틀 값
number_of_dots = 100 # 내가 그릴 점의 갯수
for dot_count in range(1, number_of_dots + 1):
tim.dot(20, random.choice(color_list)) # 20 크기 만큼의 점을 찍는다.
tim.forward(50) # 50 만큼 앞으로 전진
if dot_count % 10 == 0:
tim.setheading(90) # 90도(위를 향하는 방향)
tim.forward(50) # 50만큼 위로 올라감
tim.setheading(180) # 180도(왼쪽을 향하는 방향)
tim.forward(500) # 500만큼 전진
tim.setheading(0)
screen = turtle_module.Screen()
screen.exitonclick()
