turtle(海龟)知识点整理

turtle(海龟)知识点


 知识点大纲


目录

turtle(海龟)知识点

 知识点大纲

Python的一个简单介绍 

安装turtle库

turtle绘图的基础知识

1、画布

1.1 绘图坐标系

2、画笔

2.1 RGB色彩体系

扫描二维码关注公众号,回复: 12285096 查看本文章

3、绘图命令方法

3.1 画笔运动方法

3.2 画笔控制方法

3.3 全局控制方法

3.4 其他的一些特殊方法

4、turtle库快速参考 

5、一些实例

5.1 实现一个樱花树

5.2 画一朵玫瑰花

5.3 画一个心


Python的一个简单介绍 

Python的turtle库是一个用于绘制图形的库,它来自 Wally Feurzeig, Seymour Papert 于 1967 年在麻省理工学院MIT人工智能实验室开发的 Logo 编程语言。由于turtle绘图十分的直观而且十分受欢迎,所以turtle也逐渐的成为了Python的标准库之一。它很容易学习并且使用简单。

安装turtle库

使用turtle库,第一步,安装turtle库,使用pip命令安装turtle

pip install turtle

一、turtle绘图的基础知识

import turtle

1、画布

对小海龟来说,有“前进”,“后退”,“旋转”等行为,相对于坐标系也是通过“前进方向”、“后退方向”、“左侧方向”、“右侧方向”来完成,并且它可以变换颜色,改变大小等。画布就是turtle为我们用于绘图区域提供的窗口, 我们可以根据坐标参数设置它的大小和初始位置。

1.1 绘图坐标系

a. setup()方法

turtle.setup(width,height,startx,starty)

# turtle.setup(width=_CFG["width"], height=_CFG["height"], startx=_CFG["leftright"], starty=_CFG["topbottom"])

作用:设置主窗口的大小和位置。默认参数值保存在配置字典中,可通过 turtle.cfg 文件进行修改。

  • width:   窗口宽度,如果值是整数,表示像素值;如果值是小数,表示窗口宽度与屏幕的比例,默认为屏幕的 50%。
  • height : 窗口高度,如果值是整数,表示像素值;如果值是小数,表示窗口高度与屏幕的比例,默认为屏幕的 75%。
  • startx:   如为正值,表示初始位置距离屏幕左边缘多少像素,负值表示距离右边缘,如果值是None,窗口位于屏幕水平中央。
  • starty:   如为正值,表示初始位置距离屏幕上边缘多少像素,负值表示距离下边缘,如果值是None,窗口位于屏幕垂直中央。

实例: 

import turtle, time
turtle.screensize(800, 600, "pink")
turtle.screensize() #返回默认大小(400, 300)
time.sleep(3)

注意:

  • setup()也是可选的,只是需要定义窗口的大小及位置是才使用。 

 b. screensize()方法

screensize包括3个参数,定义了画板的大小和背景色。

turtle.screensize(canvwidth, canvheight, bg)

# turtle.screensize(canvwidth=None, canvheight=None, bg=None)
  • canvwidth -- 正整型数,以像素表示画布的新宽度值

  • canvheight -- 正整型数,以像素表示画面的新高度值

  • bg -- 颜色字符串或颜色元组,新的背景颜色

实例:

import turtle, time
turtle.screensize(800, 600, "pink")
turtle.screensize() #返回默认大小(400, 300)
time.sleep(3)

注意:

  • 如未指定任何参数,则返回当前的 (canvaswidth, canvasheight)。否则改变作为海龟绘图场所的画布大小。不改变绘图窗口。要观察画布的隐藏区域,可以使用滚动条。通过此方法可以令之前绘制于画布之外的图形变为可见。
  • 想要改变窗口的大小,改变screensize不行,需要改变setup。

2、画笔

turtle中的画笔可以通过函数来控制

turtle.penup()   # 抬起画笔,之后移动画笔不绘制形状。
turtle.pendown() # 落下画笔,之后移动画笔将绘制形状。
turtle.pensize() # 用来设置画笔尺寸;turtle.width()设置画笔宽度,当无参数输入时返回当前画笔宽度。
turtle.pencolor()# 没有参数传入返回当前画笔颜色。turtle.pencolor((r,g,b))设置当前画笔颜色。
turtle.speed()   # 设置画笔移动速度,画笔绘制的速度范围[0,10]整数,数字越大越快。

2.1 RGB色彩体系

在计算机RGB色彩体系中,很多颜色都有固定的英文名字,这些英文名字可以作为colorstring输入到turtle.pencolor()函数中,也可以采用(r,g,b)形式直接输入颜色值。下面介绍几种典型的RGB颜色

常用颜色:

英文名称 RGB整数值 RGB小数值 中文名称
white 255,255,255 1,1,1 白色
yellow 255,255,0 1,1,0 黄色
magenta 255,0,255 1,0,1 洋红
cyan 0,255,255 0,1,1 青色
blue 0,0,255 0,0,1 蓝色
black 0,0,0 0,0,0 黑色
purple 160,32,240 0.63,0.13,0.94 紫色
# 颜色字符串
turtle.pencolor('purple')  # 小写
# RGB小数值
turtle.pencolor(0.63,0.13,0.94) #三个小数值
# RGB数值元组  
turtle.pencolor((0.63,0.13,0.94))  # 一个三元素元组

RGB (RedAs Integer ,GreenAs Integer ,BlueAs Integer )

部分

描述

red

必要参数;Integer类型。数值范围从 0 到 255,表示颜色的红色成份。

green

必要参数;Integer类型。数值范围从 0 到 255,表示颜色的绿色成份。

blue

必要参数;Integer类型。数值范围从 0 到 255,表示颜色的蓝色成份。

注意:

  • 使用turtle.colormode(mode)来调整海龟的颜色,默认采用RGB小数值,可以切换为整数值
  • 如果其中有一个参数的值超过 255 ,不会显示任何错误,但这个参数会被当做 255。

3、绘图命令方法

turtle通过一组函数控制画笔的行进动作,进而绘制形状,这些函数命令分别是:画笔运动方法、画笔控制方法和全局控制方法。

3.1 画笔运动方法

命令 说明
turtle.forward(distance) 海龟前进 distance 指定的距离,方向为海龟的朝向。
turtle.backward(distance) 海龟后退 distance 指定的距离,方向与海龟的朝向相反。不改变海龟的朝向。
turtle.right(angle) 海龟右转 angle 个单位。(单位默认为角度,但可通过 degrees() 和 radians() 函数改变设置。)
turtle.left(degree) 海龟左转 angle 个单位。(单位默认为角度,但可通过 degrees() 和 radians() 函数改变设置。) 
turtle.pendown() 移动时绘制图形,缺省时也为绘制
turtle.goto(x,y) 将画笔移动到坐标为x,y的位置
turtle.penup() 移动时不绘制图形,提起笔,用于另起一个地方绘制时用
turtle.speed(speed)

设置海龟移动的速度为 0..10 表示的整型数值。如未指定参数则返回当前速度。

  • "fastest": 0 最快

  • "fast": 10 快

  • "normal": 6 正常

  • "slow": 3 慢

  • "slowest": 1 最慢

速度值从 1 到 10,画线和海龟转向的动画效果逐级加快。

注意: speed = 0 表示 没有 动画效果。forward/back 将使海龟向前/向后跳跃,同样的 left/right 将使海龟立即改变朝向。

turtle.circle(radiusextent=Nonesteps=None) 绘制一个 radius 指定半径的圆。圆心在海龟左边 radius 个单位;extent 为一个夹角,用来决定绘制圆的一部分。如未指定 extent*则绘制整个圆。如果 *extent 不是完整圆周,则以当前画笔位置为一个端点绘制圆弧。如果 radius 为正值则朝逆时针方向绘制圆弧,否则朝顺时针方向。最终海龟的朝向会依据 extent 的值而改变。

3.2 画笔控制方法

命令 说明
turtle.pensize(width=None) 绘制图形时的宽度
turtle.pen(pen=Nonependict)

返回或设置画笔的属性,以一个包含以下键值对的 "画笔字典" 表示:

  • "shown": True/False

  • "pendown": True/False

  • "pencolor": 颜色字符串或颜色元组

  • "fillcolor": 颜色字符串或颜色元组

  • "pensize": 正数值

  • "speed": 0..10 范围内的数值

  • "resizemode": "auto" 或 "user" 或 "noresize"

  • "stretchfactor": (正数值, 正数值)

  • "outline": 正数值

  • "tilt": 数值

turtle.fillcolor(*args)

返回或设置填充颜色

  • fillcolor()

返回以颜色描述字符串或元组 (见示例) 表示的当前填充颜色。可用作其他 color/pencolor/fillcolor 调用的输入。

  • fillcolor(colorstring)

设置填充颜色为 colorstring 指定的 Tk 颜色描述字符串,例如 "red""yellow" 或 "#33cc8c"

  • fillcolor((r, g, b))

设置填充颜色为以 rgb 元组表示的 RGB 颜色。rgb 的取值范围应为 0..colormode,colormode 的值为 1.0 或 255 。

  • fillcolor(r, g, b)

设置填充颜色为 rgb 表示的 RGB 颜色。rgb 的取值范围应为 0..colormode。

turtle.color(*args) 返回或设置画笔颜色和填充颜色,填充为 True,否则为 False。
turtle.filling() 返回当前是否在填充状态
turtle.begin_fill() 在绘制要填充的形状之前调用。
turtle.end_fill() 填充上次调用 begin_fill() 之后绘制的形状。
turtle.hideturtle() 使海龟不可见,隐藏海龟可显著加快绘制速度。
turtle.showturtle() 使海龟可见。

3.3 全局控制方法

命令 说明
turtle.clear() 从中删除所有海龟的全部绘图。将已清空的 TurtleScreen 重置为初始状态: 白色背景,无背景片,无事件绑定并启用追踪。
turtle.reset() 清空窗口,重置turtle状态为起始状态
turtle.undo() 撤消 (或连续撤消) 最近的一个 (或多个) 海龟动作。可撤消的次数由撤消缓冲区的大小决定。
turtle.isvisible() 如果海龟显示返回 True,如果海龟隐藏返回 False
turtle.stamp() 在海龟当前位置印制一个海龟形状。返回该印章的 stamp_id,印章可以通过调用 clearstamp(stamp_id) 来删除。
turtle.write(s[,font=("font-name",font_size,"font_type")]) 写文本,s为文本内容,font是字体的参数,里面分别为字体名称,大小和类型;font为可选项, font的参数也是可选项

3.4 其他的一些特殊方法

命令

说明

turtle.mainloop()或turtle.done()

开始事件循环 - 调用 Tkinter 的 mainloop 函数。必须作为一个海龟绘图程序的结束语句。

turtle.mode(mode=None)

设置乌龟模式(“standard”,“logo”或“world”)并执行重置。如果没有给出模式,则返回当前模式。

模式

初始龟标题

正角度

standard

向右(东)

逆时针

logo

向上(北)

顺时针

turtle.delay(delay=None)

设置或返回以毫秒为单位的绘图延迟。

turtle.begin_poly()

开始记录多边形的顶点。当前的乌龟位置是多边形的第一个顶点。

turtle.end_poly()

停止记录多边形的顶点。当前的乌龟位置是多边形的最后一个顶点。将与第一个顶点相连。

turtle.get_poly()

返回最新记录的多边形。

4、turtle库快速参考 

到这里已经可以自己动手写出一个简单的图形了吗?

5、一些实例

5.1 实现一个樱花树

import turtle
import random
from turtle import *
from time import sleep


# 画樱花的躯干(60,t)
turtle.hideturtle()
def tree(branchLen, t):
    sleep(0.0005)
    if branchLen > 3:
        if 8 <= branchLen <= 12:
            if random.randint(0, 2) == 0:
                t.color('snow')  # 白
            else:
                t.color('lightcoral')  # 淡珊瑚色
            t.pensize(branchLen / 3)
        elif branchLen < 8:
            if random.randint(0, 1) == 0:
                t.color('snow')
            else:
                t.color('lightcoral')  # 淡珊瑚色
            t.pensize(branchLen / 2)
        else:
            t.color('sienna')  # 赭(zhě)色
            t.pensize(branchLen / 10)  # 6
        t.forward(branchLen)
        a = 1.5 * random.random()
        t.right(20 * a)
        b = 1.5 * random.random()
        tree(branchLen - 10 * b, t)
        t.left(40 * a)
        tree(branchLen - 10 * b, t)
        t.right(20 * a)
        t.up()
        t.backward(branchLen)
        t.down()


# 掉落的花瓣
def petal(m, t):
    for i in range(m):
        a = 200 - 400 * random.random()
        b = 10 - 20 * random.random()
        t.up()
        t.forward(b)
        t.left(90)
        t.forward(a)
        t.down()
        t.color('lightcoral')  # 淡珊瑚色
        t.circle(1)
        t.up()
        t.backward(a)
        t.right(90)
        t.backward(b)


def main():
    # 绘图区域
    t = turtle.Turtle()
    # 画布大小
    w = turtle.Screen()
    t.hideturtle()  # 隐藏画笔
    getscreen().tracer(5, 0)
    w.screensize(bg='wheat')  # wheat小麦
    t.left(90)
    t.up()
    t.backward(150)
    t.down()
    t.color('sienna')

    # 画樱花的躯干
    tree(60, t)
    # 掉落的花瓣
    petal(200, t)
    w.exitonclick()

main()

5.2 画一朵玫瑰花

#RoseDraw.py
import turtle as t
# 定义一个曲线绘制函数
def DegreeCurve(n, r, d=1):
    for i in range(n):
        t.left(d)
        t.circle(r, abs(d))
# 初始位置设定
s = 0.2 # size
t.setup(450*5*s, 750*5*s)
t.pencolor("black")
t.fillcolor("red")
t.speed(100)
t.penup()
t.goto(0, 900*s)
t.pendown()
# 绘制花朵形状
t.begin_fill()
t.circle(200*s,30)
DegreeCurve(60, 50*s)
t.circle(200*s,30)
DegreeCurve(4, 100*s)
t.circle(200*s,50)
DegreeCurve(50, 50*s)
t.circle(350*s,65)
DegreeCurve(40, 70*s)
t.circle(150*s,50)
DegreeCurve(20, 50*s, -1)
t.circle(400*s,60)
DegreeCurve(18, 50*s)
t.fd(250*s)
t.right(150)
t.circle(-500*s,12)
t.left(140)
t.circle(550*s,110)
t.left(27)
t.circle(650*s,100)
t.left(130)
t.circle(-300*s,20)
t.right(123)
t.circle(220*s,57)
t.end_fill()
# 绘制花枝形状
t.left(120)
t.fd(280*s)
t.left(115)
t.circle(300*s,33)
t.left(180)
t.circle(-300*s,33)
DegreeCurve(70, 225*s, -1)
t.circle(350*s,104)
t.left(90)
t.circle(200*s,105)
t.circle(-500*s,63)
t.penup()
t.goto(170*s,-30*s)
t.pendown()
t.left(160)
DegreeCurve(20, 2500*s)
DegreeCurve(220, 250*s, -1)
# 绘制一个绿色叶子
t.fillcolor('green')
t.penup()
t.goto(670*s,-180*s)
t.pendown()
t.right(140)
t.begin_fill()
t.circle(300*s,120)
t.left(60)
t.circle(300*s,120)
t.end_fill()
t.penup()
t.goto(180*s,-550*s)
t.pendown()
t.right(85)
t.circle(600*s,40)
# 绘制另一个绿色叶子
t.penup()
t.goto(-150*s,-1000*s)
t.pendown()
t.begin_fill()
t.rt(120)
t.circle(300*s,115)
t.left(75)
t.circle(300*s,100)
t.end_fill()
t.penup()
t.goto(430*s,-1070*s)
t.pendown()
t.right(30)
t.circle(-600*s,35)
t.done()

5.3 画一个心

import turtle
import time
# 画爱心的顶部
def LittleHeart():
    for i in range(200):
        turtle.right(1)
        turtle.forward(2)
# 输入表白的语句,默认I Love you
love = input('请输入表白语句,默认为输入为"I Love you": ')
# 输入署名或者赠谁,没有不执行
me = input('请输入您心上人的姓名或者昵称: ')
if love == '':
    love = 'I Love you'
# 窗口大小
turtle.setup(width=800, height=500)
# 颜色
turtle.color('red', 'pink')
# 笔粗细
turtle.pensize(5)
# 速度
turtle.speed(10)
# 提笔
turtle.up()
# 隐藏笔
turtle.hideturtle()
# 去到的坐标,窗口中心为0,0
turtle.goto(0, -180)
turtle.showturtle()
# 画上线
turtle.down()
turtle.speed(1)
turtle.begin_fill()
turtle.left(140)
turtle.forward(224)
# 调用画爱心左边的顶部
LittleHeart()
# 调用画爱右边的顶部
turtle.left(120)
LittleHeart()
# 画下线
turtle.forward(224)
turtle.end_fill()
turtle.pensize(5)
turtle.up()
turtle.hideturtle()
# 在心中写字 一次
turtle.goto(0, 0)
turtle.showturtle()
turtle.color('#CD5C5C', 'red')
# 在心中写字 font可以设置字体自己电脑有的都可以设 align开始写字的位置
turtle.write(love, font=('gungsuh', 30,), align="center")
turtle.up()
turtle.hideturtle()
time.sleep(2)
# 写署名
if me != '':
    turtle.color('black', 'pink')
    time.sleep(2)
    turtle.goto(180, -180)
    turtle.showturtle()
    turtle.write(me, font=(20,), align="center", move=True)
 
# 点击窗口关闭
window = turtle.Screen()
window.exitonclick()


参考文档

turtle --- 海龟绘图

猜你喜欢

转载自blog.csdn.net/adminkeys/article/details/112713640