#18 turtle模块
前言
这一节继续记录模块,本节将记录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模块的更多相关文章
- python绘制图形(Turtle模块)
用python的Turtle模块可以绘制很多精美的图形,下面简单介绍一下使用方法. 需要用到的工具有python,python 的安装这里就不再细说.自行搜索. from turtle import ...
- Python turtle模块小黄人程序
讲解Python初级课程的turtle模块,简单粗暴的编写了小黄人的程序.程序还需要进一步优化.难点就是要搞清楚turtle在绘制图形过程中的方向变化. import turtle t = turtl ...
- 十八. Python基础(18)常用模块
十八. Python基础(18)常用模块 1 ● 常用模块及其用途 collections模块: 一些扩展的数据类型→Counter, deque, defaultdict, namedtuple, ...
- Python3之turtle模块的使用
Python3之turtle模块的使用 直接扣代码就行: import turtle as t t.pensize(4) t.hideturtle() t.colormode(255) t.c ...
- Python02 标准输入输出、数据类型、变量、随记数的生成、turtle模块详解
1 标准输出 python3利用 print() 来实现标准输出 def print(self, *args, sep=' ', end='\n', file=None): # known speci ...
- 海龟绘图turtle模块的使用
在本章中,我们将编写简短的.简单的程序来创建漂亮的.复杂的视觉效果.为了做到这一点,我们可以使用海龟作图软件.在海龟作图中,我们可以编写指令让一个虚拟的(想象中的)海龟在屏幕上来回移动.这个海龟带着一 ...
- 绘图工具--turtle模块
turtle模块主要使用两个类,一个是TurtleScreen类,表示画布(窗口),用来展示画的位置:一个是Turtle类,用来充当画笔,用来画. 两个类的方法也以同名的函数的形式存在,所以可以以面向 ...
- Python——用turtle模块画海龟的第一步
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...
- Python turtle 模块可以编写游戏,是真的吗?
1. 前言 turtle (小海龟) 是 Python 内置的一个绘图模块,其实它不仅可以用来绘图,还可以制作简单的小游戏,甚至可以当成简易的 GUI 模块,编写简单的 GUI 程序. 本文使用 tu ...
随机推荐
- web版ssh的使用
一.web_ssh版本安装使用 web_ssh源码:https://github.com/shellinabox/shellinabox 1)安装依赖包 yum install git openssl ...
- 73.解决Xcode10 library not found for -lstdc++ 找不到问题
Xcode10 彻底废除了libstdc++,相关文件libstdc++.6.0.9.dylib.libstdc++.6.dylib.libstdc++.dylib.libstdc++.6.0.9.t ...
- boost--时间处理
date_time库的时间功能位于名字空间boost::posix_time,它提供了微妙级别(最高可达纳秒)的时间系统,使用需要包含头文件"boost\date_time\posix_ti ...
- Python开发——7.迭代器、生成器和装饰器
一.迭代器 1.迭代器协议 (1)迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么引起一个StopIteration移除异常以中止迭代. (2)可迭代对象:实现了迭 ...
- Linux下nautilus的右键快捷菜单项设置
某一天我的Linux更新完后, 我照常在文件夹下点击右键想打开终端, 却发现右键快捷菜单没有Open in terminal的菜单项了. 在网上查找了一下, 结合自己系统的情况发现了解决办法. 由于我 ...
- hdu 4034
比赛时才发现自己基础算法都忘得光光了,逆向floyd i->j经过k点,只要i到j的距离大于或者等于,就把这边标记,实为去掉...此时整个图就减一条边 #include<iostream& ...
- 使用Docker搭建CentOS 7 + Apache 2.4+ PHP7
从Docker Hub上Pull最新的CentOS 7镜像并新建容器 # sudo docker pull centos docker run -p 8082:80 --name centos_c - ...
- 12:集合map、工具类
一.map集合 Map:一次添加一对元素.Collection 一次添加一个元素. Map也称为双列集合,Collection集合称为单列集合. 其实map集合中存储的就是键值对(结婚证书), map ...
- Oracle 的分页查询 SQL 语句
Oracle的分页查询语句基本上可以按照本文给出的格式来进行套用. 分页查询格式: SELECT * FROM (SELECT A.*, ROWNUM RN FROM (SELECT * FROM T ...
- 《JavaScript面向对象编程指南》读书笔记②
概述 <JavaScript面向对象编程指南>读书笔记① 这里只记录一下我看JavaScript面向对象编程指南记录下的一些东西.那些简单的知识我没有记录,我只记录几个容易遗漏的或者精彩的 ...