turtle(海龟)知识点


知识点大纲


目录

turtle(海龟)知识点

知识点大纲

Python的一个简单介绍

安装turtle库

turtle绘图的基础知识

1、画布

1.1 绘图坐标系

2、画笔

2.1 RGB色彩体系

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)  # 6t.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 --- 海龟绘图

turtle(海龟)知识点整理相关推荐

  1. Python Turtle 海龟绘图详解官方文档中文版

    Python Turtle 海龟绘图详解 (官方文档中文版)-安徽省太湖中学陈晓中整理 概述 海龟绘图很适合用来引导孩子学习编程. 最初来自于 Wally Feurzeig, Seymour Pape ...

  2. C语言考研复试知识点整理

    C语言考研复试知识点整理 1.由float x=3e-6,y=3e-6;不能得到x= =y的逻辑值为真. 解析:float类型的变量只能进行>或<运算,不能进行==运算 2.自增和自减运算 ...

  3. 【Android 面试基础知识点整理】

    针对Android面试中常见的一些知识点整理,Max 仅仅是个搬运工.感谢本文中引用文章的各位作者,给大家分享了这么多优秀文章.对于当中的解析,是原作者个人见解,有错误和不准确的地方,也请大家积极指正 ...

  4. mysql 存储引擎 面试_搞定PHP面试 - MySQL基础知识点整理 - 存储引擎

    MySQL基础知识点整理 - 存储引擎 0. 查看 MySQL 支持的存储引擎 可以在 mysql 客户端中,使用 show engines; 命令可以查看MySQL支持的引擎: mysql> ...

  5. mysql 全面知识点_Mysql知识点整理

    1.存储引擎区别 MyISAM:不支持事物.仅支持表级锁.支持B+树索引 MEMORY:不支持事物.仅支持表级锁.支持B+树和HASH索引 InnoDB:支持事物.支持行级锁.支持B+树索引 2.锁机 ...

  6. 04741计算机网络原理知识点,04741计算机网络原理知识点整理.doc

    04741计算机网络原理知识点整理 1.计算机网络大发展 计算机网络从20世纪70年代开始发展,他的演变可以概括为 面向终端的计算机网络.计算机-计算机网络.开放式标准化网络以及因特网广泛应用和高速网 ...

  7. python基础知识整理-python入门基础知识点整理-20171214

    一.知识点整理 1.python2与python3的区别: (1)宏观比对 python2 源码不标准,较为混乱,并且重复的代码很多. python3 源码统一了标准,同时也去除了重复代码. (2)编 ...

  8. python基础知识整理-python爬虫基础知识点整理

    首先爬虫是什么? 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本. 根据我的经验,要学习Python爬虫 ...

  9. JS,JQ,PHP的小知识点整理

    在日常开发中所使用的JS,JQ,PHP的小知识点整理 持续更新-- 1.js和jq获取当前的时间戳 方法一: <script>var timestamp = Date.parse(new ...

最新文章

  1. 云主机和物理机PK图
  2. 安卓 python termux_Android Termux 安装 Linux 就是这么简单
  3. 用计算机KADIO算方差,KADIO计算器怎样算方差
  4. 认真理解 oom killer 备忘
  5. OpenCV形态morphology的实例(附完整代码)
  6. Tsinsen A1493 城市规划(DP + CDQ分治 + NTT)
  7. Intellij IDEA IDE 运行Sphinx-4 DEMO helloworld出现空...
  8. python实用库_python常用库
  9. Python高级编专题 - 类的创建与销毁
  10. JavaScript高级知识点整理
  11. Android 集成google地图
  12. java word文档内容比较_Java 比较两个Word文档差异
  13. 腾讯云服务器地域节点IP速度测试表
  14. HC05蓝牙模块 修改密码 返回 ERROR:(1D)解决办法
  15. 强烈推荐:20款优秀的数据可视化工具
  16. 为什么说 NLP 将是未来数据领域的珠峰?
  17. opencv 旋转和平移的矩阵
  18. secureCRT使用问题记录
  19. 【android编程】第五讲-Android高级组件
  20. 利用Latex如何输入角度符号

热门文章

  1. NPDP产品经理证书在中国有用吗?
  2. dev-c++输出的中文乱码
  3. 【Android】模拟返回键、菜单键、Home键
  4. C语言基本——求圆的面积和周长
  5. vlan的几种划分方式
  6. python jupyter notebook怎么调字体大小_配置Jupyter的代码主题 字体以及字体大小 代码自动补全...
  7. python实现随机密码生成
  8. 从零开始学Java编程!南通java招聘
  9. 【thinkphp5.1】htmlentities() expects parameter 1 to be string, array given
  10. XML文件内容格式化与语法错误自动检查