Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x、纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行的路径上绘制了图形。

turtle绘图的基础知识:
1. 画布(canvas)

画布就是turtle为我们展开用于绘图区域,我们可以设置它的大小和初始位置。

设置画布大小

turtle.screensize(canvwidth=None, canvheight=None, bg=None),参数分别为画布的宽(单位像素), 高, 背景颜色。

如:turtle.screensize(800,600, "green")

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

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

如:turtle.setup(width=0.6,height=0.6)

turtle.setup(width=800,height=800, startx=100, starty=100)

2. 画笔

2.1 画笔的状态

在画布上,默认有一个坐标原点为画布中心的坐标轴,坐标原点上有一只面朝x轴正方向小乌龟。这里我们描述小乌龟时使用了两个词语:坐标原点(位置),面朝x轴正方向(方向), turtle绘图中,就是使用位置方向描述小乌龟(画笔)的状态。

2.2 画笔的属性

画笔(画笔的属性,颜色、画线的宽度等)

1) turtle.pensize():设置画笔的宽度;

2) turtle.pencolor():没有参数传入,返回当前画笔颜色,传入参数设置画笔颜色,可以是字符串如"green", "red",也可以是RGB 3元组。

3) turtle.speed(speed):设置画笔移动速度,画笔绘制的速度范围[0,10]整数,数字越大越快。

2.3 绘图命令

操纵海龟绘图有着许多的命令,这些命令可以划分为3种:一种为运动命令,一种为画笔控制命令,还有一种是全局控制命令。

(1) 画笔运动命令

命令

说明

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

画圆,半径为正(负),表示圆心在画笔的左边(右边)画圆

setx( )

将当前x轴移动到指定位置

sety( )

将当前y轴移动到指定位置

setheading(angle)

设置当前朝向为angle角度

home()

设置当前画笔位置为原点,朝向东。

dot(r)

绘制一个指定直径和颜色的圆点

(2) 画笔控制命令

命令

说明

turtle.fillcolor(colorstring)

绘制图形的填充颜色

turtle.color(color1, color2)

同时设置pencolor=color1, fillcolor=color2

turtle.filling()

返回当前是否在填充状态

turtle.begin_fill()

准备开始填充图形

turtle.end_fill()

填充完成

turtle.hideturtle()

隐藏画笔的turtle形状

turtle.showturtle()

显示画笔的turtle形状

(3) 全局控制命令

命令

说明

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) 其他命令

命令

说明

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

返回最后记录的多边形。

3. 命令详解

3.1 turtle.circle(radius, extent=None, steps=None)

描述:以给定半径画圆

参数:

radius(半径):半径为正(负),表示圆心在画笔的左边(右边)画圆;

extent(弧度) (optional);

steps (optional) (做半径为radius的圆的内切正多边形,多边形边数为steps)。

举例:

circle(50) # 整圆;

circle(50,steps=3) # 三角形;

circle(120, 180) # 半圆

   1 1、太阳花
2
3
4 # coding=utf-8
5 import turtle
6 import time
7
8 # 同时设置pencolor=color1, fillcolor=color2
9 turtle.color("red", "yellow")
10
11 turtle.begin_fill()
12 for _ in range(50):
13 turtle.forward(200)
14 turtle.left(170)
15 turtle.end_fill()
16
17 turtle.mainloop()
18
19
20
21
22 2、五角星
23
24
25 # coding=utf-8
26 import turtle
27 import time
28
29 turtle.pensize(5)
30 turtle.pencolor("yellow")
31 turtle.fillcolor("red")
32
33 turtle.begin_fill()
34 for _ in range(5):
35 turtle.forward(200)
36 turtle.right(144)
37 turtle.end_fill()
38 time.sleep(2)
39
40 turtle.penup()
41 turtle.goto(-150,-120)
42 turtle.color("violet")
43 turtle.write("Done", font=('Arial', 40, 'normal'))
44
45 turtle.mainloop()
46
47
48
49
50 3、时钟程序
51
52 # coding=utf-8
53
54 import turtle
55 from datetime import *
56
57 # 抬起画笔,向前运动一段距离放下
58 def Skip(step):
59 turtle.penup()
60 turtle.forward(step)
61 turtle.pendown()
62
63 def mkHand(name, length):
64 # 注册Turtle形状,建立表针Turtle
65 turtle.reset()
66 Skip(-length * 0.1)
67 # 开始记录多边形的顶点。当前的乌龟位置是多边形的第一个顶点。
68 turtle.begin_poly()
69 turtle.forward(length * 1.1)
70 # 停止记录多边形的顶点。当前的乌龟位置是多边形的最后一个顶点。将与第一个顶点相连。
71 turtle.end_poly()
72 # 返回最后记录的多边形。
73 handForm = turtle.get_poly()
74 turtle.register_shape(name, handForm)
75
76 def Init():
77 global secHand, minHand, hurHand, printer
78 # 重置Turtle指向北
79 turtle.mode("logo")
80 # 建立三个表针Turtle并初始化
81 mkHand("secHand", 135)
82 mkHand("minHand", 125)
83 mkHand("hurHand", 90)
84 secHand = turtle.Turtle()
85 secHand.shape("secHand")
86 minHand = turtle.Turtle()
87 minHand.shape("minHand")
88 hurHand = turtle.Turtle()
89 hurHand.shape("hurHand")
90
91 for hand in secHand, minHand, hurHand:
92 hand.shapesize(1, 1, 3)
93 hand.speed(0)
94
95 # 建立输出文字Turtle
96 printer = turtle.Turtle()
97 # 隐藏画笔的turtle形状
98 printer.hideturtle()
99 printer.penup()
100
101 def SetupClock(radius):
102 # 建立表的外框
103 turtle.reset()
104 turtle.pensize(7)
105 for i in range(60):
106 Skip(radius)
107 if i % 5 == 0:
108 turtle.forward(20)
109 Skip(-radius - 20)
110
111 Skip(radius + 20)
112 if i == 0:
113 turtle.write(int(12), align="center", font=("Courier", 14, "bold"))
114 elif i == 30:
115 Skip(25)
116 turtle.write(int(i/5), align="center", font=("Courier", 14, "bold"))
117 Skip(-25)
118 elif (i == 25 or i == 35):
119 Skip(20)
120 turtle.write(int(i/5), align="center", font=("Courier", 14, "bold"))
121 Skip(-20)
122 else:
123 turtle.write(int(i/5), align="center", font=("Courier", 14, "bold"))
124 Skip(-radius - 20)
125 else:
126 turtle.dot(5)
127 Skip(-radius)
128 turtle.right(6)
129
130 def Week(t):
131 week = ["星期一", "星期二", "星期三",
132 "星期四", "星期五", "星期六", "星期日"]
133 return week[t.weekday()]
134
135 def Date(t):
136 y = t.year
137 m = t.month
138 d = t.day
139 return "%s %d%d" % (y, m, d)
140
141 def Tick():
142 # 绘制表针的动态显示
143 t = datetime.today()
144 second = t.second + t.microsecond * 0.000001
145 minute = t.minute + second / 60.0
146 hour = t.hour + minute / 60.0
147 secHand.setheading(6 * second)
148 minHand.setheading(6 * minute)
149 hurHand.setheading(30 * hour)
150
151 turtle.tracer(False)
152 printer.forward(65)
153 printer.write(Week(t), align="center",
154 font=("Courier", 14, "bold"))
155 printer.back(130)
156 printer.write(Date(t), align="center",
157 font=("Courier", 14, "bold"))
158 printer.home()
159 turtle.tracer(True)
160
161 # 100ms后继续调用tick
162 turtle.ontimer(Tick, 100)
163
164 def main():
165 # 打开/关闭龟动画,并为更新图纸设置延迟。
166 turtle.tracer(False)
167 Init()
168 SetupClock(160)
169 turtle.tracer(True)
170 Tick()
171 turtle.mainloop()
172
173 if __name__ == "__main__":
174 main()

python turtle笔记的更多相关文章

  1. python+turtle 笔记

    用Python+turtle绘制佩琪: from turtle import * def nose(x,y):#鼻子 penup()#提起笔 goto(x,y)#定位 pendown()#落笔,开始画 ...

  2. Web Scraping with Python读书笔记及思考

    Web Scraping with Python读书笔记 标签(空格分隔): web scraping ,python 做数据抓取一定一定要明确:抓取\解析数据不是目的,目的是对数据的利用 一般的数据 ...

  3. python学习笔记整理——字典

    python学习笔记整理 数据结构--字典 无序的 {键:值} 对集合 用于查询的方法 len(d) Return the number of items in the dictionary d. 返 ...

  4. VS2013中Python学习笔记[Django Web的第一个网页]

    前言 前面我简单介绍了Python的Hello World.看到有人问我搞搞Python的Web,一时兴起,就来试试看. 第一篇 VS2013中Python学习笔记[环境搭建] 简单介绍Python环 ...

  5. python学习笔记之module && package

    个人总结: import module,module就是文件名,导入那个python文件 import package,package就是一个文件夹,导入的文件夹下有一个__init__.py的文件, ...

  6. python datetime笔记

    python datetime笔记 http://mint-green.diandian.com/post/2011-09-09/4892024 获取当前时间,并通过字符串输出. 格式为:%Y-%m- ...

  7. python学习笔记(六)文件夹遍历,异常处理

    python学习笔记(六) 文件夹遍历 1.递归遍历 import os allfile = [] def dirList(path): filelist = os.listdir(path) for ...

  8. python学习笔记--Django入门四 管理站点--二

    接上一节  python学习笔记--Django入门四 管理站点 设置字段可选 编辑Book模块在email字段上加上blank=True,指定email字段为可选,代码如下: class Autho ...

  9. python学习笔记--Django入门0 安装dangjo

    经过这几天的折腾,经历了Django的各种报错,翻译的内容虽然不错,但是与实际的版本有差别,会出现各种奇葩的错误.现在终于找到了解决方法:查看英文原版内容:http://djangobook.com/ ...

随机推荐

  1. tf.estimator

    estimator同keras是tensorflow的高级API.在tensorflow1.13以上,estimator已经作为一个单独的package从tensorflow分离出来了.estimat ...

  2. Choway Blog

    choway 2018-12-11 09:23:46 JavaJVM Java 虚拟机(JVM)在执行 Java 程序时会把它管理的内存划分为多个不同的数据区域.这些区域各有用途,以及创建和销毁的时间 ...

  3. 如何安装及使用honmaple社区程序 · honmaple's blog · 风落花语风落天,花落风雨花落田.

    Table of Contents 1. 如何安装及使用 1.1. 安装需要的package 1.2. 配置config 1.3. 注释下面代码 1.4. 初始化数据库 1.5. 创建管理员账户 2. ...

  4. 为什么 generator 忽略第一次 next 调用的参数值呢?

    首先要理解几个基本概念. 执行生成器不会执行生成器函数体的代码,只是获得一个遍历器 一旦调用 next,函数体就开始执行,一旦遇到 yield 就返回执行结果,暂停执行 第二次 next 的参数会作为 ...

  5. Canvas和svg总结比较

    Canvas 基本用法 getContext() 描边和填充 strokeStyle:设置描边样式fillStyle:设置填充样式stroke():描边fill():填充 绘制矩形 fillRect( ...

  6. Windows系统在Python2.7环境下安装numpy, matplotlib, scipy - Lichanghao Blog

    numpy, matplotlib, scipy三个包是科学计算和绘图的利器.安装它们既可以在网上下载exe安装包,也可以用python内置的包管理工具来下载安装,后者较为方便. 这几天做美赛要用到, ...

  7. 致歉Note7用户后,三星要还给世界下一个机皇

    ​ 1月23日,三星电子在韩国首尔公布了Note7事件原因调查结果.此次认定过程精密而繁琐,最终结果发布距离三星宣布全球召回Note7已经有3个月. 相比事发之初各路信息甚嚣尘上,现在虽然还不能说已经 ...

  8. Javascript中的局部变量、全局变量的详解与var、let的使用区别

    前言 Javascript中的变量定义方式有以下三种方式:1.直接定义变量,var与let均不写: a = 10; 2.使用var关键字定义变量 var a = 10; 3.使用let关键字定义变量 ...

  9. GitLab-CI部署及踩坑总结

    转载请注明出处:https://www.cnblogs.com/shining5/p/8863063.html 部署GitLab-CI 简介 GitLab_CI(gitlab continuous i ...

  10. 一个简单的爬取b站up下所有视频的所有评论信息的爬虫

    心血来潮搞了一个简单的爬虫,主要是想知道某个人的b站账号,但是你知道,b站在搜索一个用户时,如果这个用户没有投过稿,是搜不到的,,,这时就只能想方法搞到对方的mid,,就是 space.bilibil ...