1 安装 turtle
python默认已经安装了turtle,turtle是python的标准库,不需要额外安装。
2 基础概念
2.1 画布(canvas)
画布就是turtle为我们展开用于绘图区域, 我们可以设置它的大小和初始位置。
常用的画布方法有两个:screensize() 和 setup() 。
(1)turtle.screensize(canvwidth=None, canvheight=None, bg=None)
参数分别为画布的宽(单位像素), 高, 背景颜色
例:
import turtle turtle.screensize(800, 600, "green")
import turtle turtle.screensize() #返回默认大小(400, 300)
(2)turtle.setup(width=0.5, height=0.75, startx=None, starty=None)
参数:
width, height: 输入宽和高为整数时, 表示像素; 为小数时, 表示占据电脑屏幕的比例。
(startx, starty): 这一坐标表示 矩形窗口左上角顶点的位置, 如果为空,则窗口位于屏幕中心。
例:
import turtle turtle.setup(width=0.6, height=0.6)
import turtle turtle.setup(width=800, height=800, startx=100, starty=100)
2.2 画笔
在画布上,默认有一个坐标原点为画布中心的坐标轴, 坐标原点上有一只面朝x轴正方向小乌龟。
这里我们描述小乌龟时使用了两个词语:标原点(位置),面朝x轴正方向(方向),turtle绘图中, 就是使用位置方向描述小乌龟(画笔)的状态。
(1)画笔的属性
画笔有颜色、画线的宽度等属性。
1 turtle.pensize():设置画笔的宽度;
import turtle turtle.pensize(0.2) turtle.forward(100) turtle.pensize(2) turtle.forward(100) turtle.pensize(20) turtle.forward(100) turtle.pensize(20) turtle.forward(200)
2 turtle.pencolor():没有参数传入返回当前画笔颜色;传入参数设置画笔颜色,可以是字符串如"green", “red”,也可以是RGB 3元组。
import turtle turtle.pencolor('brown') turtle.forward(100) tup = (0.2, 0.8, 0.55) turtle.pencolor(tup) turtle.forward(100) turtle.pencolor('#33cc8c') turtle.forward(100)
3 turtle.speed(speed) :设置画笔移动速度,画笔绘制的速度范围[0,10]整数, 数字越大越快
import turtle turtle.speed(1) turtle.forward(100) turtle.speed(5) turtle.forward(100) turtle.speed(10) turtle.forward(100)
turtle空间坐标体系
绝对坐标
重要函数:
turtle.goto(x,y) 让任何位置的海龟到达某一个坐标位置
海龟坐标
重要函数:
turtle.fd(d) 向海龟的正前方向运行
turtle.bk(d) 向海龟的反方向运行
turtle.circle(r,angle)以海龟当前位置左侧的某一点为圆心,进行曲线运行
注:前后左右是相对海龟来说,不是相对屏幕
3 turtle角度坐标体系
绝对角度
重要函数:
turtle.seth(angle) 改变海龟行进方向
海龟角度
重要函数:
如上图所示
3 turtle库绘图命令
操纵海龟绘图有着许多的命令,这些命令可以划分为3种:运动命令,画笔控制命令和全局控制命令
画笔运动命令:
命令 说明
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.speed(speed) 画笔绘制的速度范围[0,10]整数
turtle.circle() 画圆,半径为正(负),表示圆心在画笔的左边(右边)画圆
画笔控制命令:
命令 说明
turtle.pensize(width) 绘制图形时的宽度
turtle.pencolor() 画笔颜色
turtle.fillcolor(colorstring) 绘制图形的填充颜色
turtle.color(color1, color2) 同时设置pencolor=color1, fillcolor=color2
turtle.filling() 返回当前是否在填充状态
turtle.begin_fill() 准备开始填充图形
turtle.end_fill() 填充完成;
turtle.hideturtle() 隐藏箭头显示;
turtle.showturtle() 与hideturtle()函数对应
全局控制命令
命令 说明
turtle.clear() 清空turtle窗口,但是turtle的位置和状态不会改变
turtle.reset() 清空窗口,重置turtle状态为起始状态
turtle.undo() 撤销上一个turtle动作
turtle.isvisible() 返回当前turtle是否可见
stamp() 复制当前图形
turtle.write(s[,font=(“font-name”,font_size,“font_type”)]) 写文本,s为文本内容,font是字体的参数,里面分别为字体名称,大小和类型;font为可选项, font的参数也是可选项
4 绘图举例
正方形
from turtle import *
forward(100)
left(90)
forward(100)
left(90)
forward(100)
left(90)
forward(100)
left(90)
exitonclick()
等边三角形
from turtle import *
forward(100)
left(120)
forward(100)
left(120)
forward(100)
left(120)
exitonclick()#点击屏幕后再停止
五角星
from turtle import *
for i in range(5):
forward(100)
left(180-36)
exitonclick()#点击屏幕后再停止
=================================================
四、海龟方法详解
1.海龟动作
(1)移动和绘制
turtle.forward(distance)
turtle.fd(distance)
参数:
distance – 一个数值 (整型或浮点型)
作用:
海龟前进 distance 指定的距离,方向为海龟的朝向
turtle.back(distance)
turtle.bk(distance)
turtle.backward(distance)
参数:
distance – 一个数值
作用:
海龟后退 distance 指定的距离,方向与海龟的朝向相反。不改变海龟的朝向
turtle.right(angle)
turtle.rt(angle)
参数:
angle – 一个数值 (整型或浮点型)
作用:
海龟右转 angle 个单位。(单位默认为角度,但可通过 degrees() 和 radians() 函数改变设置。)
turtle.left(angle)
turtle.lt(angle)
参数:
angle – 一个数值 (整型或浮点型)
作用:
海龟左转 angle 个单位。(单位默认为角度,但可通过 degrees() 和 radians() 函数改变设置。)
turtle.goto(x, y=None)
turtle.setpos(x, y=None)
turtle.setposition(x, y=None)
参数:
x – 一个数值或数值对/向量
y – 一个数值或 None
如果 y 为 None,x 应为一个表示坐标的数值对或 Vec2D 类对象 (例如 pos() 返回的对象).
作用:
海龟移动到一个绝对坐标。如果画笔已落下将会画线。不改变海龟的朝向。
例子:
# x和y
turtle.setpos(60,30)
# x为元组
turtle.setpos((20,80))
# x为pos()返回的元组
tp = turtle.pos()
turtle.setpos(tp)
turtle.setx(x)
参数:
x – 一个数值 (整型或浮点型)
作用:
设置海龟的横坐标为 x,纵坐标保持不变。
turtle.sety(y)
参数:
y – 一个数值 (整型或浮点型)
作用:
设置海龟的纵坐标为 y,横坐标保持不变。
turtle.setheading(to_angle)
turtle.seth(to_angle)
参数:
to_angle – 一个数值 (整型或浮点型)
作用:
设置海龟的朝向为 to_angle。
turtle.home()
作用:
海龟移至初始坐标 (0,0),并设置朝向为初始方向 (由海龟模式确定,参见 mode())。
turtle.circle(radius, extent=None, steps=None)
参数:
radius – 一个数值 (整型或浮点型),表示半径
如果 radius 为正值则圆心在乌龟头的左边,否则圆心在乌龟头的右边。
extent – 一个数值 (整型或浮点型),表示角度
如未指定 extent则绘制整个圆,指定角度(可以大于360°)则绘制圆弧。
如果 radius 为正值则按乌龟的前进的方向,否则按乌龟的倒退的方向。
steps – 一个整型数
如未指定 steps则绘制圆弧,指定则绘制多边形(边数大于0)。
作用:
绘制一个 radius 指定半径的多边形部分。
例子:
# 绘制在左边的、按前进方向的
import turtle
turtle.circle(50,270)
turtle.done()
# 绘制在右边的、按前进方向的
import turtle
turtle.circle(50,270)
turtle.done()
# 绘制在左边的、按后退方向的
import turtle
turtle.circle(50,270)
turtle.done()
# 绘制在右边的、按后退方向的
import turtle
turtle.circle(50,270)
turtle.done()
# 绘制三角形
import turtle
turtle.circle(50,360,3)
turtle.done()
turtle.dot(size=None, *color)
参数:
size – 一个整型数 >= 1 (如果指定)
如果 size 未指定,则直径取 pensize+4 和 2*pensize 中的最大值。
color – 一个颜色字符串或颜色数值元组
未指定则是画笔颜色。
作用:
绘制一个直径为 size,颜色为 color 的圆点。
例子:
turtle.dot(),turtle.dot(50),turtle.dot("blue"),turtle.dot(50,"blue")
import turtle
turtle.dot(50,"blue")
turtle.done()
turtle.undo()
作用:
撤消 (或连续撤消) 最近的一个 (或多个) 海龟动作。可撤消的次数由撤消缓冲区的大小决定。
turtle.speed(speed=None)
参数:
speed – 一个 0到10 范围内的整型数或速度字符串
无参:返回当前海龟的速度
speed对应表:
如果输入数值大于 10 或小于 0.5 则速度设为 0。
字符串 数字 含义
“fastest” 0 最快
“fast” 10 快
“normal” 6 正常
“slow” 3 慢
“slowest” 1 最慢
速度值从 1 到 10,画线和海龟转向的动画效果逐级加快。speed = 0 表示没有动画效果(转向),但绘制还是需要时间,最快。
作用:
设置海龟移动的速度或返回当前海龟的速度。
(2)获取海龟状态
turtle.position()
turtle.pos()
作用:
返回海龟当前的坐标 (x,y) (为 Vec2D 矢量类对象)。
turtle.towards(x, y=None)
参数:
x – 一个数值或数值对/矢量,或一个海龟实例
y – 一个数值——如果 x 是一个数值,否则为 None
返回一个角度,从海龟位置到到 (x,y)的矢量到海龟初始朝向的矢量的夹角。
例子:
import turtle
turtle.goto(50,50)
print(turtle.towards(0,0))
turtle.done()
# 225.0
# 海龟朝向0°,从(50,50)到(0,0)的矢量朝向225°,两者相差225.0
turtle.xcor()
作用:
返回海龟的 x 坐标。
turtle.ycor()
作用:
返回海龟的 y 坐标。
turtle.heading()
作用:
返回海龟当前的朝向的角度
turtle.distance(x, y=None)
参数:
x – 一个数值或数值对/矢量,或一个海龟实例
y – 一个数值——如果 x 是一个数值,否则为 None
返回从海龟位置到 (x,y)的单位距离。
(3)度量单位设置
turtle.degrees(fullcircle=360.0)
参数:
fullcircle – 一个数值
作用:
设置一个圆周为多少 “度”。默认值为 360 度。
>>> turtle.home()
>>> turtle.left(90)
>>> turtle.heading()
90.0
>>> turtle.degrees(400.0)
>>> turtle.heading()
100.0
# 原来的朝向占一个圆的四分之一,90/360。现在,还要占四分之一,那就是400/4=100°
turtle.radians()
设置角度的度量单位为弧度。其值等于 度 ÷ 180 × π 度\div 180 \times \pi 度÷180×π。
>>> turtle.home()
>>> turtle.left(90)
>>> turtle.heading()
90.0
>>> turtle.radians()
>>> turtle.heading()
1.5707963267948966
# 90/180*3.14=1.57...
2.画笔控制
(1)绘图状态
turtle.pendown()
turtle.pd()
turtle.down()
作用:
画笔落下 – 移动时将画线。
turtle.penup()
turtle.pu()
turtle.up()
作用:
画笔抬起 – 移动时不画线。
turtle.pensize(width=None)
turtle.width(width=None)
参数:
width – 一个正数值
无参:返回画笔的线条粗细。
作用:
设置线条的粗细为 width 或返回该值。
turtle.isdown()
作用:
如果画笔落下返回 True,如果画笔抬起返回 False。
(2)颜色控制
turtle.pencolor(*args)
参数:
pencolor()
返回表示当前画笔颜色的颜色描述字符串或元组。
pencolor(colorstring)
设置画笔颜色为 colorstring 指定的 Tk 颜色描述字符串。
如:turtle.pencolor("brown")或turtle.pencolor('#32c18f')
pencolor((r, g, b))
设置画笔颜色为以 r, g, b 元组表示的 RGB 颜色。r, g, b 的取值范围应为0…colormode。
如:turtle.pencolor((0.2, 0.8, 0.55))或turtle.pencolor((51.0, 204.0, 140.0))
pencolor(r, g, b)
设置画笔颜色为以 r, g, b 表示的 RGB 颜色。r, g, b 的取值范围应为 0…colormode。
如:turtle.pencolor(0.2, 0.8, 0.55)或turtle.pencolor(51.0, 204.0, 140.0)
作用:
返回或设置画笔颜色。
turtle.fillcolor(*args)
参数:同turtle.pencolor(*args)
fillcolor()
fillcolor(colorstring)
fillcolor((r, g, b))
fillcolor(r, g, b)
作用:
返回或设置填充颜色。
turtle.color(*args)
参数:
color()
返回以一对颜色描述字符串或元组表示的画笔颜色和填充颜色,两者可分别由 pencolor() 和 fillcolor() 返回。
color(colorstring)
color((r,g,b))
color(r,g,b)
同时设置画笔颜色 填充颜色为指定的值。
color(colorstring1, colorstring2)
color((r1,g1,b1), (r2,g2,b2))
相当于pencolor(colorstring1) 加 fillcolor(colorstring2)
作用:
返回或设置画笔颜色和填充颜色。
(3)填充
turtle.filling()
作用:
返回填充状态 (填充为 True,否则为 False)。
turtle.begin_fill()
作用:
在绘制要填充的形状之前调用。要配合turtle.end_fill()使用。
turtle.end_fill()
作用:
填充上次调用 begin_fill() 之后绘制的形状。要配合turtle.begin_fill()使用。
例子:
import turtle turtle.color("black", "red") turtle.begin_fill() turtle.circle(80) turtle.end_fill() turtle.done()
(4)更多绘图控制
turtle.reset()
作用:
从屏幕中删除海龟的绘图,海龟回到原点并设置所有变量为默认值。
turtle.clear()
作用:
从屏幕中删除指定海龟的绘图。不移动海龟。海龟的状态和位置以及其他海龟的绘图不受影响。
import turtle turtle.forward(100) turtle.left(90) turtle.forward(100) #turtle.clear()
上图没有 clear,下图 clear,可以看出:删除海龟的绘图,海龟的状态和位置不受影响。
import turtle turtle.forward(100) turtle.left(90) turtle.forward(100) turtle.clear()
turtle.write(arg, move=False, align="left", font=("Arial", 8, "normal"))
参数:
arg – 要书写到 TurtleScreen 的对象
如:"something",123,(1,2),[1,2,3]等
move – True/False
如果 move 为 True,画笔会移动到文本的右下角,这样文字就不会叠在一块了。
align – 字符串 “left”, “center” 或 “right”
align 指定对齐方式 (“left”, “center” 或 right")
font – 一个三元组 (fontname, fontsize, fonttype)
font 指定字体
书写文本 - arg 指定的字符串 - 到当前海龟位置。
例子:
import turtle
turtle.write("Home = ",True, align="center")
turtle.write( [123,456], True)
turtle.done()
3.海龟状态
(1)可见性
turtle.hideturtle()
turtle.ht()
作用:
使海龟不可见。当你绘制复杂图形时这是个好主意,因为隐藏海龟可显著加快绘制速度。
turtle.showturtle()
turtle.st()
作用:
使海龟可见。
turtle.isvisible()
作用:
如果海龟显示返回 True,如果海龟隐藏返回 False。
(2)外观
turtle.shape(name=None)
参数:
name – 一个有效的形状名字符串
无参:返回当前的形状名
设置海龟形状或返回当前的形状名。
形状名 图形
“arrow” 在这里插入图片描述
“blank”(透明) 在这里插入图片描述
“turtle” 在这里插入图片描述
“circle” 在这里插入图片描述
“square” 在这里插入图片描述
“triangle” 在这里插入图片描述
“classic” 在这里插入图片描述
turtle.register_shape(name, shape=None)
turtle.addshape(name, shape=None)
调用此函数有三种不同方式:
name 为一个 gif 文件的文件名, shape 为 None: 安装相应的图像形状。:
注解:当海龟转向时图像形状 不会 转动,因此无法显示海龟的朝向!
name 为指定的字符串,shape 为由坐标值对构成的元组: 安装相应的多边形形状。
import turtle
turtle.register_shape("myshape", ((-20,20), (0,-10), (50,0)))
turtle.shape("myshape")
turtle.done()
name 为指定的字符串, 为一个 (复合) Shape 类对象: 安装相应的复合形状。
作用:
将一个海龟形状加入 TurtleScreen 的形状列表。只有这样注册过的形状才能通过执行 shape(shapename) 命令来使用。
=================================================
REF
Python turtle.circle()函数
pycharm turtle无法识别turtle. 没有自动提示
https://blog.csdn.net/sandalphon4869/article/details/99443949
https://blog.csdn.net/weixin_46451496/article/details/107686486
https://docs.python.org/zh-cn/3/library/turtle.html
https://www.it610.com/article/1291589116017844224.htm
https://www.freesion.com/article/30191163480/
https://blog.csdn.net/weixin_44997802/article/details/107929807