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")

Python入门示例系列32 Turtle 入门

 

import turtle
turtle.screensize() #返回默认大小(400, 300)

Python入门示例系列32 Turtle 入门

 
(2)turtle.setup(width=0.5, height=0.75, startx=None, starty=None)
参数:
    width, height: 输入宽和高为整数时, 表示像素; 为小数时, 表示占据电脑屏幕的比例。
    (startx, starty): 这一坐标表示 矩形窗口左上角顶点的位置, 如果为空,则窗口位于屏幕中心。

Python入门示例系列32 Turtle 入门

 例:

import turtle
turtle.setup(width=0.6, height=0.6)

Python入门示例系列32 Turtle 入门

 

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)

Python入门示例系列32 Turtle 入门

 
    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)

Python入门示例系列32 Turtle 入门

  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空间坐标体系

绝对坐标
Python入门示例系列32 Turtle 入门

 
重要函数:
turtle.goto(x,y) 让任何位置的海龟到达某一个坐标位置

海龟坐标
Python入门示例系列32 Turtle 入门

 
重要函数:
turtle.fd(d) 向海龟的正前方向运行
turtle.bk(d) 向海龟的反方向运行
turtle.circle(r,angle)以海龟当前位置左侧的某一点为圆心,进行曲线运行
注:前后左右是相对海龟来说,不是相对屏幕

3 turtle角度坐标体系

绝对角度
Python入门示例系列32 Turtle 入门

 

重要函数:
turtle.seth(angle) 改变海龟行进方向

海龟角度
Python入门示例系列32 Turtle 入门

 
重要函数:
如上图所示
 


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()

Python入门示例系列32 Turtle 入门



(4)更多绘图控制

turtle.reset()
作用:
从屏幕中删除海龟的绘图,海龟回到原点并设置所有变量为默认值。

turtle.clear()
作用:
从屏幕中删除指定海龟的绘图。不移动海龟。海龟的状态和位置以及其他海龟的绘图不受影响。

import turtle
turtle.forward(100)
turtle.left(90)
turtle.forward(100)
#turtle.clear()

 

Python入门示例系列32 Turtle 入门

 

上图没有 clear,下图 clear,可以看出:删除海龟的绘图,海龟的状态和位置不受影响。

import turtle
turtle.forward(100)
turtle.left(90)
turtle.forward(100)
turtle.clear()

 

 Python入门示例系列32 Turtle 入门

 

 



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

 

相关文章: