海龟绘图很适合用来引导孩子学习编程,通过编写简短的、简单的程序来创建漂亮的、复杂的视觉效果。而且还可以通过跟随海龟观察到每行代码是如何影响到它的移动,可以很好的帮助我们理解代码的逻辑,也是非常适合孩子学习的。
在绘图区有一只海龟,起始位置原点(0,0),先执行import turtle,在执行turtle.forward(15)可以控制海龟朝向x轴正方向前进15像素,即画出一条线段。
通过组合使用一些指令程序,可以绘制出精美的形状和图案。
一、画布
画布就是海龟的绘图区域范围,可以通过指令修改画布的大小和初始位置
turtle.screensize(canvwidth=None,canvheight=None,bg=None)参数:canvwidth:画布的宽度,canvheight:画布的高度,bg:画布的背景
turtle.setup(width=0.5,height=0.75,startx=None,starty=None)width和height:宽和高,整数表示像素,小数表示占据屏幕的比例;startx和starty:表示矩形窗口左上角顶点的位置,为空,则位于屏幕中心。
二、画笔
画笔默认位于画布中心原点x-y(0,0)位置。
import turtle as t
t.forward(150)
默认形状是一个黑色箭头
改变海龟外观:
turtle.shape(name=None)name:一个有效名字的字符串
“arrow” | “turtle” |
“circle” | “square” |
“triangle” | “classic” |
import turtle as t
t.shape("turtle")
海龟是否可见:
turtle.hideturtle() |
turtle.showturtle() |
turtle.isvisible() |
turtle.hideturtle(),turtle.ht()使海龟不可见。当你绘制复杂图形时这是个好主意,因为隐藏海龟可显著加快绘制速度。
turtle.showturtle(),turtle.st(),使海龟可见。
turtle.isvisible(),如果海龟显示返回 True,如果海龟隐藏返回 False。
import turtle as t
t.shape("turtle")
t.circle(100)
t.ht()
海龟移动指令
turtle.forward(distance) | turtle.right(angle) |
turtle.goto(x,y) | turtle.backward(distance) |
turtle.left(angle) | turtle.setpos(x,y) |
turtle.setposition(x,y) | turtle.speed(speed) |
turtle.forward(distance),turtle.fd(distance)海龟前进 distance 指定的距离,方向为海龟的朝向。
turtle.bk(distance),turtle.backward(distance)海龟后退 distance 指定的距离,方向与海龟的朝向相反。不改变海龟的朝向。
turtle.right(angle),turtle.rt(angle)海龟右转 angle 个单位。
turtle.left(angle),turtle.lt(angle)海龟左转 angle 个单位。
turtle.goto(x, y=None),turtle.setpos(x, y=None),turtle.setposition(x, y=None)海龟移动到一个绝对坐标。如果画笔已落下将会画线。不改变海龟的朝向。
turtle.speed(speed=None)"fastest": 0 最快,"fast": 10 快,"normal": 6 正常,"slow": 3 慢,"slowest": 1 最慢
画笔控制——绘图状态
turtle.pendown() |
turtle.penup() |
turtle.pensize(width=None) |
turtle.pendown()、turtle.pd()、turtle.down()画笔落下 -- 移动时将画线
turtle.penup()、turtle.pu()、turtle.up()画笔抬起 -- 移动时不画线
turtle.pensize(width=None)设置线条的粗细为 width 或返回该值
import turtle as t
# 设置海龟形状和速度
t.shape("turtle")
t.speed()
t.pu() #抬笔
t.setpos(-100,100) #将画笔移动到(-100,100)的位置
t.pd() #落笔,开始绘制半径为50的圆
t.circle(50)
t.pu() #抬笔
t.goto(100,100) #将画笔移动到(100,100)的位置
t.pendown() #落笔,开始绘制半径为50的圆
t.circle(50)
t.penup() #抬笔
t.setposition(100,-100) #将画笔移动到(100,-100)的位置
t.pendown() #落笔,开始绘制半径为50的圆
t.circle(50)
t.pu() #抬笔
t.setpos(-100,-100) #将画笔移动到(-100,-100)的位置
t.pd() #落笔,开始绘制半径为50的圆
t.circle(50)
t.ht() #隐藏海龟
在画布的四个不同位置,绘制了4个半径为50的圆
颜色控制和填充
颜色控制 | 填充 |
color() | filling() |
pencolor() | begin_fill() |
fillcolor() | end_fill() |
turtle.pencolor(colorstring)设置画笔颜色为 colorstring 指定的 Tk 颜色描述字符串,例如 "red"、"yellow" 或 "#33cc8c"
turtle.fillcolor(colorstring)设置填充颜色为 colorstring 指定的 Tk 颜色描述字符串,例如 "red"、"yellow" 或 "#33cc8c"。
turtle.color(colorstring1, colorstring2)设置画笔颜色和填充颜色,相当于 pencolor(colorstring1) 加 fillcolor(colorstring2)
turtle.filling()返回填充状态 (填充为 True,否则为 False)
turtle.begin_fill()在绘制要填充的形状之前调用
turtle.end_fill()填充上次调用 begin_fill() 之后绘制的形状
from turtle import *
# 设置海龟形状和速度
shape("turtle")
speed()
color('red','light blue') # 设置画笔颜色为red,填充颜色为light blue
begin_fill() # 开始填充
pu() #抬笔
setpos(-100,100) #将画笔移动到(-100,100)的位置
pd() #落笔,开始绘制半径为50的圆
circle(50)
end_fill() # 结束填充
pu() #抬笔
goto(100,100) #将画笔移动到(100,100)的位置
pendown() #落笔,开始绘制半径为50的圆
circle(50)
penup() #抬笔
setposition(100,-100) #将画笔移动到(100,-100)的位置
pendown() #落笔,开始绘制半径为50的圆
circle(50)
#修改画笔颜色为blue,填充颜色为orange
pencolor('blue')
fillcolor('orange')
begin_fill() # 开始填充
pu() #抬笔
setpos(-100,-100) #将画笔移动到(-100,-100)的位置
pd() #落笔,开始绘制半径为50的圆
circle(50)
end_fill() # 结束填充
ht() #隐藏海龟
一开始使用color('red','light blue')
,设置画笔和填充颜色分别为red和light blue,绘制完第一个圆之后,开始填充。
第二个和第三个圆并没有设置填充颜色,在绘制第四个圆之前,利用
pencolor('blue')
fillcolor('orange')
修改了画笔和填充的颜色。
更改背景颜色
turtle.bgcolor(*args)一个颜色字符串或三个取值范围 0..colormode 内的数值或一个取值范围相同的数值3元组