Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x、纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行的路径上绘制了图形。
在1966年,Seymour Papert和Wally Feurzig发明了一种专门给儿童学习编程的语言——LOGO语言,它的特色就是通过编程指挥一个小海龟(turtle)在屏幕上绘图。海龟绘图(Turtle Graphics)后来被移植到各种高级语言中,Python内置了turtle库,基本上100%复制了原始的Turtle Graphics的所有功能。
使用之前需要导入库:
from turtle import *
画笔运动命令
命令 | 说明 |
turtle.forward(distance) | 向当前画笔方向移动distance像素长度 |
turtle.backward(distance) | 向当前画笔相反方向移动distance像素长度 |
turtle.right(degree) | 顺时针移动degree° |
turtle.left(degree) | 逆时针移动degree° |
turtle.pendown() | 移动时绘制图形,缺省时也为绘制 |
turtle.goto(x,y) | 将画笔移动到坐标为x,y的位置 |
turtle.penup() | 提起笔移动,不绘制图形,用于另起一个地方绘制 |
turtle.circle() | 画圆,半径为正(负),表示圆心在画笔的左边(右边)画圆 |
setx( ) | 将当前x轴移动到指定位置 |
sety( ) | 将当前y轴移动到指定位置 |
setheading(angle) | 设置当前朝向为angle角度 |
home() | 设置当前画笔位置为原点,朝向东。 |
dot(r) | 绘制一个指定直径和颜色的圆点 |
画笔控制命令
命令 | 说明 |
turtle.fillcolor(colorstring) | 绘制图形的填充颜色 |
turtle.color(color1, color2) | 同时设置pencolor=color1, fillcolor=color2 |
turtle.filling() | 返回当前是否在填充状态 |
turtle.begin_fill() | 准备开始填充图形 |
turtle.end_fill() | 填充完成 |
turtle.hideturtle() | 隐藏画笔的turtle形状 |
turtle.showturtle() | 显示画笔的turtle形状 |
如,画一个长方形:
- # 导入turtle包的所有内容:
- from turtle import *
-
- # 设置笔刷宽度:
- width(4)
-
- # 前进:
- forward(200)
- # 右转90度:
- right(90)
-
- # 笔刷颜色:
- pencolor('red')
- forward(100)
- right(90)
-
- pencolor('green')
- forward(200)
- right(90)
-
- pencolor('blue')
- forward(100)
- right(90)
-
- # 调用done()使得窗口等待被关闭,否则将立刻关闭窗口:
- done()
更多操作请参考turtle库的说明。https://docs.python.org/3.6/library/frameworks.html
五角星:
- from turtle import *
- for i in range(5):
- fd(200)
- rt(144)
- done()
填充颜色
- from turtle import *
- width(4)
- pencolor("yellow")
- fillcolor("red")
-
- begin_fill()
- for i in range(5):
- fd(200)
- rt(144)
- end_fill()
- done()
太阳花:
- from turtle import *
-
- color('red', 'yellow')
-
- begin_fill()
-
- while True:
- forward(200)
- left(170)
- if abs(pos()) < 1:
- break
-
- end_fill()
-
- done()
太极图:
- from turtle import *
-
- circle(100,180)
- circle(200,180)
- circle(100,-180)
-
- fillcolor('black')
-
- begin_fill()
-
- circle(100,180)
- circle(200,180)
- circle(100,-180)
-
- end_fill()
-
- penup()
-
- goto(0,100)
- dot(50)
- goto(0,-100)
- pencolor('white')
- dot(50)
-
- hideturtle()
-
- done()
利用循环嵌套方法画图:
- from turtle import *
-
- for i in range(6):
- pendown()
- fd(150)
-
- for j in range(10):
- circle(40)
- lt(36)
- lt(60)
- penup() goto(0,0)
- done()
画一个笑脸
- from turtle import *
- def go(x,y):
- penup()
- goto(x,y)
- pendown()
- def arc(radius):
- circle(radius,90)
- reset()
- speed(0)
- go(0,-150)
- circle(200)
- go(50,100)
- seth(225)
- arc(10)
- arc(50)
- arc(10)
- arc(50)
- go(-50,100)
- seth(-45)
- arc(-10)
- arc(-50)
- arc(-10)
- arc(-50)
- go(-70,-50)
- arc(100)
- hideturtle()
绘制一棵分型树:
- from turtle import *
-
- # 设置色彩模式是RGB:
- colormode(255)
-
- lt(90)
- lv = 14
- l = 120
- s = 45
-
- width(lv)
-
- # 初始化RGB颜色:
- r = 0
- g = 0
- b = 0
- pencolor(r, g, b)
-
- penup()
- bk(l)
- pendown()
- fd(l)
-
- def draw_tree(l, level):
- global r, g, b
- # save the current pen width
- w = width()
-
- # narrow the pen width
- width(w * 3.0 / 4.0)
- # set color:
- r = r + 1
- g = g + 2
- b = b + 3
- pencolor(r % 200, g % 200, b % 200)
-
- l = 3.0 / 4.0 * l
-
- lt(s)
- fd(l)
-
- if level < lv:
- draw_tree(l, level + 1)
- bk(l)
- rt(2 * s)
- fd(l)
-
- if level < lv:
- draw_tree(l, level + 1)
- bk(l)
- lt(s)
-
- # restore the previous pen width
- width(w)
-
- speed("fastest")
-
- draw_tree(l, 4)
-
- done()
螺旋图:
- from turtle import *
- for i in range(100):
- fd(2*i)
- lt(90)
- done()
- from turtle import *
-
- speed(10)
-
- for i in range(200):
- fd(2*i)
- lt(92)
- done()