前言

这一节继续记录模块,本节将记录Python中一个非常重要的画图模块——turtle,Here we go!

一、turtle模块

turtle(海龟)模块是Python中强大的内置画图模块,可以模拟真实的画图环境以及画图步骤来画图。通常,我们画图需要两种工具,一个是画布,另一个是画笔;在turtle中,同样需要这两种工具,首先来学习画布的设置

1. 画布

画布无非不过设置画布大小、背景颜色、画布在桌面的位置,turtle模块中,有两种画布的设置方法,需要时可将它们结合起来使用:

turtle.screensize(canvwidth=400, canvheight=300, bg=None)   「canvwidth表示画布宽、canvheight表示画布高、bg表示背景颜色」

In [19]: import turtle                             # 导入turtle模块

In [21]: turtle.screensize()                       # 设置默认尺寸
Out[21]: (400, 300) In [22]: turtle.screensize(800,600) # 将画布大小改为800x600,单位是像素 In [23]: turtle.screensize(800,600,bg='green') # 也可以设置背景颜色 # 桌面上会出现一个画布,想要推出,输入turtle.done(),之后就可以点击画布上的x号关闭了

turtle.setup(width=0.5, height=0.75, startx=None, starty=None)   「width表示画布宽、height表示画布高、startx表示画布在桌面上的坐标x位置、starty表示画布在桌面上的坐标y位置」

In [26]: import turtle

In [28]: turtle.setup()                # 设置默认画布大小

In [29]: turtle.setup(800,600)         # 将画布大小改为800x600,单位是像素

In [30]: turtle.setup(0.5,0.5)         # 将画布大小改为占当前屏幕的0.5x0.5,无单位,这是一个比例

In [31]: turtle.setup(800,600,50,50)   # 设置画布初始位置为(50,50)

# 注意:当宽高为大于1的整数时,单位为像素;当宽高为小于1的小数时,为占当前屏幕的比例

如果要给有背景色的画布设置初始位置,则可以将上述两种方法结合起来使用:

In [34]: import turtle

In [36]: turtle.screensize(bg='green')   # 首先设置背景色

In [37]: turtle.setup(800,600,200,200)   # 再设置宽高和位置

2. 画笔

说完了画布设置,就剩下画笔了,画笔这一部分有些复杂,因为不仅要设置画笔的粗细颜色等,还要给画笔前进后退旋转等动作

2.1 画笔设置

turtle.pensize(width=None)   「width表示画笔的宽度」

In [39]: turtle.pensize(20)   # 设置画笔的宽度为20像素

turtle.pencolor(*args)   「可以传入多种参数,例如直接传入颜色‘green’,也可以传入RGB配色0.2,0.8,0.55」

In [42]: turtle.pencolor('green')   # 设置画笔颜色为绿色,直接传入颜色

In [43]: turtle.pencolor(0.2, 0.8, 0.55)   # 传入RGB配色

turtle.speed(speed=None)   「speed代表画笔速度」

In [45]: turtle.speed(5)   # 设置画笔速度为5

2.2 画笔动作

turtle.forward(distance) / turtle.fd(distance)  「画笔前进,distance代表距离」

turtle.backward(distance) / turtle.bk(distance) 「画笔后退,distance代表距离」

In [50]: turtle.fd(200)   # 画笔前进200像素

In [51]: turtle.bk(300)   # 画笔后退300像素

turtle.seth(degree) 「画笔运动的方向,degree代表角度」

In [77]: turtle.seth(90)   # 画笔运动方向为90度正方向

# 注意:这个是轴的正方向,不是画笔的指向,有正负之分,90表示逆时针90度,-90表示顺时针90度

turtle.left(degree) 「画笔逆时针旋转,degree代表角度」

turtle.right(degree) 「画笔顺时针旋转,degree代表角度」

In [52]: turtle.left(90)    # 画笔逆时针旋转90度

In [54]: turtle.right(90)   # 画笔顺时针旋转90度

turtle.goto(x,y) 「将画笔移动到坐标(x,y)处」

In [55]: turtle.goto(300,300)   # 将画笔移动到坐标(300,300)处

# 注意:假如画笔现在的位置为(10,10),使用上条命令后,画笔移动到(300,300)处,这时候会在画布上留下一条(10,10)到(300,300)的线段

turtle.penup() 「提起画笔」

In [56]: turtle.penup()     # 将画笔提起

# 这时候使用前进后退或者goto方法都不会在画布上留下痕迹

trutle.pendown() 「落下画笔」

In [57]: turtle.pendown()   # 落下画笔

# 之后使用前进后退或goto方法会在画布上留下痕迹

turtle.circle(radius, extent=None, steps=None) 「画圆方法,radius表示半径、extent表示圆的角度、steps表示圆内切多边形的边数」

In [59]: turtle.circle(50)           # 画一个半径为50像素的圆

In [60]: turtle.circle(60,180)       # 画一个半径为60像素的半圆

In [61]: turtle.circle(70,steps=6)   # 画一个内切于半径为70像素圆的6变形,注意:这是一个多边形,不是圆

turtle.hideturtle() 「隐藏画笔箭头」

turtle.showturtle() 「显示画笔箭头」

In [62]: turtle.hideturtle()   # 隐藏画笔箭头

In [63]: turtle.showturtle()   # 显示画笔箭头

# turtle模块默认箭头时显示的,可以将其隐藏

turtle.isvisile() 「返回画笔箭头是否存在的结果」

In [71]: turtle.isvisible()   # 返回True,说明画笔箭头可见
Out[71]: True In [72]: turtle.hideturtle() In [73]: turtle.isvisible() # 返回False,说明画笔箭头不可见
Out[73]: False

 turtle.fillcolor(*args) 「填充颜色设置,可以直接传入颜色,也可以传入RGB参数」

In [65]: turtle.fillcolor('yellow')   # 设置填充颜色为黄色

turtle.begin_fill() 「开始填充图形」

turtle.end_fill() 「结束填充」

In [66]: turtle.begin_fill()   # 准备开始填充图形

In [67]: turtle.end_fill()     # 结束填充

turtle.flling() 「返回当前图形是否在填充的结果」

In [68]: turtle.filling()      # 返回False,说明当前图形不在填充
Out[68]: False In [69]: turtle.begin_fill() In [70]: turtle.filling() # 返回True,说明当前图形正在填充
Out[70]: True

turtle.undo() 「撤销上一个画笔动作」

In [74]: turtle.undo()   # 撤销上一个画笔动作

turtle.clear() 「清空画布,但保留当前画笔状态和位置」

In [75]: turtle.clear()   # 清空画布,保留画笔状态和位置

turtle.reset() 「清空画布,画笔不再保留原有状态和位置」

In [76]: turtle.reset()   # 清空画布,不会保留画笔状态和位置

# 注意:画布属性没有被重置,依然保留原画布大小、背景色和画布位置

turtle.write(s[,font=("font-name",font_size,"font_type")])) 「画笔写字,s代表要写的字符串、font-name代表字体名称、font-size代表字体大小、font-type代表字体类型」

In [78]: turtle.write('MinuteSheep')    # 写下MinuteSheep

turtle.done() 「完成画作」

In [79]: turtle.done()   # 完成画作

# 此时可以点击图画上的x号关闭图画了

3. 示例

3.1 示例一:太阳花   「来自官网」

 from turtle import *
color('red', 'yellow') # 画笔颜色为red,填充颜色为yellow
begin_fill() # 开始填充
while True:
forward(200)
left(170)
if abs(pos()) < 1:
break
end_fill()
done()

效果如图:

3.2 示例二:小猪佩奇   「来自:https://www.cnblogs.com/nowgood/p/turtle.html#_nav_11

 # coding:utf-8
import turtle as t
# 绘制小猪佩奇
# ======================================= t.pensize(4)
t.hideturtle()
t.colormode(255)
t.color((255, 155, 192), "pink")
t.setup(840, 500)
t.speed(10) # 鼻子
t.pu()
t.goto(-100,100)
t.pd()
t.seth(-30)
t.begin_fill()
a = 0.4
for i in range(120):
if 0 <= i < 30 or 60 <= i < 90:
a = a+0.08
t.lt(3) # 向左转3度
t.fd(a) # 向前走a的步长
else:
a = a-0.08
t.lt(3)
t.fd(a)
t.end_fill() t.pu()
t.seth(90)
t.fd(25)
t.seth(0)
t.fd(10)
t.pd()
t.pencolor(255, 155, 192)
t.seth(10)
t.begin_fill()
t.circle(5)
t.color(160, 82, 45)
t.end_fill() t.pu()
t.seth(0)
t.fd(20)
t.pd()
t.pencolor(255, 155, 192)
t.seth(10)
t.begin_fill()
t.circle(5)
t.color(160, 82, 45)
t.end_fill() # 头
t.color((255, 155, 192), "pink")
t.pu()
t.seth(90)
t.fd(41)
t.seth(0)
t.fd(0)
t.pd()
t.begin_fill()
t.seth(180)
t.circle(300, -30)
t.circle(100, -60)
t.circle(80, -100)
t.circle(150, -20)
t.circle(60, -95)
t.seth(161)
t.circle(-300, 15)
t.pu()
t.goto(-100, 100)
t.pd()
t.seth(-30)
a = 0.4
for i in range(60):
if 0 <= i < 30 or 60 <= i <90:
a = a+0.08
t.lt(3) # 向左转3度
t.fd(a) # 向前走a的步长
else:
a = a-0.08
t.lt(3)
t.fd(a)
t.end_fill() # 耳朵
t.color((255, 155, 192), "pink")
t.pu()
t.seth(90)
t.fd(-7)
t.seth(0)
t.fd(70)
t.pd()
t.begin_fill()
t.seth(100)
t.circle(-50, 50)
t.circle(-10, 120)
t.circle(-50, 54)
t.end_fill() t.pu()
t.seth(90)
t.fd(-12)
t.seth(0)
t.fd(30)
t.pd()
t.begin_fill()
t.seth(100)
t.circle(-50, 50)
t.circle(-10, 120)
t.circle(-50, 56)
t.end_fill() #眼睛
t.color((255, 155, 192), "white")
t.pu()
t.seth(90)
t.fd(-20)
t.seth(0)
t.fd(-95)
t.pd()
t.begin_fill()
t.circle(15)
t.end_fill() t.color("black")
t.pu()
t.seth(90)
t.fd(12)
t.seth(0)
t.fd(-3)
t.pd()
t.begin_fill()
t.circle(3)
t.end_fill() t.color((255, 155, 192), "white")
t.pu()
t.seth(90)
t.fd(-25)
t.seth(0)
t.fd(40)
t.pd()
t.begin_fill()
t.circle(15)
t.end_fill() t.color("black")
t.pu()
t.seth(90)
t.fd(12)
t.seth(0)
t.fd(-3)
t.pd()
t.begin_fill()
t.circle(3)
t.end_fill() # 腮
t.color((255, 155, 192))
t.pu()
t.seth(90)
t.fd(-95)
t.seth(0)
t.fd(65)
t.pd()
t.begin_fill()
t.circle(30)
t.end_fill() # 嘴
t.color(239, 69, 19)
t.pu()
t.seth(90)
t.fd(15)
t.seth(0)
t.fd(-100)
t.pd()
t.seth(-80)
t.circle(30, 40)
t.circle(40, 80) # 身体
t.color("red", (255, 99, 71))
t.pu()
t.seth(90)
t.fd(-20)
t.seth(0)
t.fd(-78)
t.pd()
t.begin_fill()
t.seth(-130)
t.circle(100,10)
t.circle(300,30)
t.seth(0)
t.fd(230)
t.seth(90)
t.circle(300,30)
t.circle(100,3)
t.color((255,155,192),(255,100,100))
t.seth(-135)
t.circle(-80,63)
t.circle(-150,24)
t.end_fill() # 手
t.color((255,155,192))
t.pu()
t.seth(90)
t.fd(-40)
t.seth(0)
t.fd(-27)
t.pd()
t.seth(-160)
t.circle(300,15)
t.pu()
t.seth(90)
t.fd(15)
t.seth(0)
t.fd(0)
t.pd()
t.seth(-10)
t.circle(-20,90) t.pu()
t.seth(90)
t.fd(30)
t.seth(0)
t.fd(237)
t.pd()
t.seth(-20)
t.circle(-300,15)
t.pu()
t.seth(90)
t.fd(20)
t.seth(0)
t.fd(0)
t.pd()
t.seth(-170)
t.circle(20,90) # 脚
t.pensize(10)
t.color((240,128,128))
t.pu()
t.seth(90)
t.fd(-75)
t.seth(0)
t.fd(-180)
t.pd()
t.seth(-90)
t.fd(40)
t.seth(-180)
t.color("black")
t.pensize(15)
t.fd(20) t.pensize(10)
t.color((240, 128, 128))
t.pu()
t.seth(90)
t.fd(40)
t.seth(0)
t.fd(90)
t.pd()
t.seth(-90)
t.fd(40)
t.seth(-180)
t.color("black")
t.pensize(15)
t.fd(20) # 尾巴
t.pensize(4)
t.color((255, 155, 192))
t.pu()
t.seth(90)
t.fd(70)
t.seth(0)
t.fd(95)
t.pd()
t.seth(0)
t.circle(70, 20)
t.circle(10, 330)
t.circle(70, 30)
t.done()

效果如图:

#18 turtle模块的更多相关文章

  1. python绘制图形(Turtle模块)

    用python的Turtle模块可以绘制很多精美的图形,下面简单介绍一下使用方法. 需要用到的工具有python,python 的安装这里就不再细说.自行搜索. from turtle import ...

  2. Python turtle模块小黄人程序

    讲解Python初级课程的turtle模块,简单粗暴的编写了小黄人的程序.程序还需要进一步优化.难点就是要搞清楚turtle在绘制图形过程中的方向变化. import turtle t = turtl ...

  3. 十八. Python基础(18)常用模块

    十八. Python基础(18)常用模块 1 ● 常用模块及其用途 collections模块: 一些扩展的数据类型→Counter, deque, defaultdict, namedtuple, ...

  4. Python3之turtle模块的使用

    Python3之turtle模块的使用     直接扣代码就行: import turtle as t t.pensize(4) t.hideturtle() t.colormode(255) t.c ...

  5. Python02 标准输入输出、数据类型、变量、随记数的生成、turtle模块详解

    1 标准输出 python3利用 print() 来实现标准输出 def print(self, *args, sep=' ', end='\n', file=None): # known speci ...

  6. 海龟绘图turtle模块的使用

    在本章中,我们将编写简短的.简单的程序来创建漂亮的.复杂的视觉效果.为了做到这一点,我们可以使用海龟作图软件.在海龟作图中,我们可以编写指令让一个虚拟的(想象中的)海龟在屏幕上来回移动.这个海龟带着一 ...

  7. 绘图工具--turtle模块

    turtle模块主要使用两个类,一个是TurtleScreen类,表示画布(窗口),用来展示画的位置:一个是Turtle类,用来充当画笔,用来画. 两个类的方法也以同名的函数的形式存在,所以可以以面向 ...

  8. Python——用turtle模块画海龟的第一步

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...

  9. Python turtle 模块可以编写游戏,是真的吗?

    1. 前言 turtle (小海龟) 是 Python 内置的一个绘图模块,其实它不仅可以用来绘图,还可以制作简单的小游戏,甚至可以当成简易的 GUI 模块,编写简单的 GUI 程序. 本文使用 tu ...

随机推荐

  1. zeromq示例代码

    http://www.oschina.net/code/snippet_614253_55034 将zeromq代码使用vc集中到一个解决方案中 可编译可调调试 vc2015

  2. .Net 常用插件及第三方库

    .Net 常用插件及第三方库 一:第三方插件 1:基于响应式编程思想的oc 地址:https://github.com/ReactiveCocoa/ReactiveCocoa 2:hud提示框 地址: ...

  3. 内置函数_range()

    range() range()语法格式为 range([start,] stop [,step])# 有三种用法range(stop)range(start,stop)range(start,stop ...

  4. NET Core微服务之路:实战SkyWalking+Exceptionless体验生产环境下的追踪系统

    前言 当一个APM或一个日志中心实际部署在生产环境中时,是有点力不从心的. 比如如下场景分析的问题: 从APM上说,知道某个节点出现异常,或延迟过过高,却不能及时知道日志反馈情况,总不可能去相应的节点 ...

  5. redis之一初识redis

    本文主要围绕以下几点进行阐述: 1.什么是redis? 2.为什么要使用redis呢? 3.redis的一些基本配置 4.redis的缺点? 正文: 1.什么是redis? Redis是一款内存高速缓 ...

  6. ASP.NET MVC下使用AngularJs语言(五):ng-selected

    这次学习ng-selected语法,这个是为DropDownList下拉列表显示默认选项. 演示从下面步骤开始 1,新建一个model: 上面#14行代码的property,数据类型为bool.即是存 ...

  7. utf-8 decode

    摘自 Lua 5.3 源文件 lutf8lib.c /* ** Decode one UTF-8 sequence, returning NULL if byte sequence is invali ...

  8. Swift5 语言指南(六) 字符和字符串

    甲串是一系列字符,如的或.Swift字符串由类型表示.可以通过各种方式访问a的内容,包括作为值的集合."hello, world""albatross"Stri ...

  9. HoloLens开发手记 - HoloLens上的应用视图 App views on HoloLens

    运行在HoloLens上的应用可能包含2种视图,分别是全息视图和2D视图.应用可以在全息视图和2D视图之间转换,这常被用于访问系统提供的接口,例如虚拟键盘.拥有至少一个全息视图的应用被归类为全息应用. ...

  10. Java线程池(ThreadPoolExecutor)原理分析与使用

    在我们的开发中"池"的概念并不罕见,有数据库连接池.线程池.对象池.常量池等等.下面我们主要针对线程池来一步一步揭开线程池的面纱. 使用线程池的好处 1.降低资源消耗 可以重复利用 ...