#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 ...
随机推荐
- [Django] Window上通过IIS发布Django网站
网上的教程坑实在多,以下是本人亲测通过的: 需要解决的问题: 1.使用 python manage.py runserver 来运行服务器,只适用测试环境中使用,正式发布的服务,需要一个可以稳定而持续 ...
- playframework 一步一步来 之 日志 (二)
带着之前的疑问,我们先回顾一下日志相关的知识: 首先是SL4J,SL4J是个什么东西来着?官方解释为:“The Simple Logging Facade for Java (SLF4J) serve ...
- SLICK基础
1.sbt添加依赖 "com.typesafe.slick" %% "slick" % "3.2.3", "org.slf4j&q ...
- TensorFlow数据读取
TensorFlow高效读取数据的方法 TF Boys (TensorFlow Boys ) 养成记(二): TensorFlow 数据读取 Tensorflow从文件读取数据 极客学院-数据读取 十 ...
- hive、sqoop、MySQL间的数据传递
hdfs到MySQL csv/txt文件到hdfs MySQL到hdfs hive与hdfs的映射: drop table if exists emp;create table emp ( id i ...
- python函数(一)
python函数(一) 1.函数的定义: def test(): print('test is running...') return 定义一个函数,有3个部分需要注意: 函数名称.函数的命名规范与变 ...
- 《mysql必知必会》学习_第22章_20180809_欢
第22章:使用视图,视图是虚拟的表,以表形式呈现的是你查询的结果.并不是说在数据库里面真的存在这个表,但是是真的存在这些数据. select cust_name,cust_contact from c ...
- 收藏的blog
https://www.cnblogs.com/xifengxiaoma/tag/vue/ https://www.cnblogs.com/xifengxiaoma/p/9400200.html
- Javascript高级编程学习笔记(8)—— 变量
日常更新~~ 变量 所有的编程语言中,变量都是赋予语言灵活性的根本所在. 那么JS中的变量又有那些与众不同的地方呢.? 按照ECMA-262的定义,JS的变量和其他编程语言的变量有很大的区别 其松散类 ...
- 8:String类
String类 String类的特点: 字符串对象一旦被初始化就不会被改变. 字符串是最常用的类型之一,所以为了使用方便java就给封装成了对象方便使用 public static void str ...