turltle模块详解
引言:
turtle(海龟)模块,我们是用它来进行画图的,基本上就是画简单的直线,点,和曲线。
你可以把它想成一个小海龟,在沙滩上行走,然后留下的各种痕迹,使用Turtle模块可以绘制很多精美的图形。
使用详解
1. 画布(canvas)
import turtle
t=turtle.Pen() #创建一个画布
t.forward(50) #t.forward(distance) 向当前画笔方向移动distance像素长度 = t.fd(distance)
t.left(90) # turtle.left(degree) 逆时针旋转degree度
#只有left没有forword,那么只有个向上的箭头,没有横线
#两个加在一起才有横线有箭头
t.goto(150,50) #turtle.goto(x,y) 将画笔移动到坐标为x,y的位置
t.speed(2) #画笔绘制的速度范围[0,10]整数
t.goto(100,-50)
t.circle(50, 180) #绘制一个圆形,其中radius为半径,extent为度数,例如若extent为180,则画一个半圆;如要画一个圆形,可不必写第二个参数
t.setx(25) #将画笔当前x轴移动到指定位置,y轴坐标不变
t.sety(-75) #将画笔当前y轴移动到指定位置,x轴坐标不变
t.home() #设置当前画笔位置为原点,朝向东。
t.dot(50,'red') #绘制一个指定直径和颜色的圆点
t.setheading(135)
#setheading( to_angle)/turtle.seth(d) 设置小海
# 龟当前行进方向角度为to_angle,该角度是实际的角度值。
# to_angle :角度的整数值。
程序
画布就是我们画图的空白空间,可以修改大小和初始设置
如果我们用下面的Pen(画笔)函数,他会自动创建一个画布
t = turtle.Pen()
程序运行生成一个画图窗口
import turtle
t = turtle.Pen()
这是我们可以看到画布创建了,而在画布的中心会存在一个箭头,就是初始位置,也是我们的小海龟
绘图窗口的原点(0,0)在正中间。默认情况下,海龟向正右方移动
那么如果我们要修改画布大小呢?
python为我们提供了函数
turtle.screensize(canvwidth=None, canvheight=None, bg=None)
canvwidth:画布的宽度(单位:像素)
canvheight:画布的高度(单位:像素)
.bg:背景颜色
若不设置值,默认参数为(400,300,None) 用Pen创建的就是默认大小
import turtle
turtle.screensize(canvwidth=None, canvheight=None, bg=None) #执行也会生成窗口
假如你不想设置长宽,只想按照屏幕大小来设定,别着急python还有一个函数
turtle.setup(width=0.5, height=0.75, startx=None, starty=None)
width,height:输入宽和高为整数时, 表示像素; 为小数时, 表示占据电脑屏幕的比例
(startx,starty):这一坐标表示矩形窗口左上角顶点的位置。如果为空,则窗口位于屏幕中心
执行还是会生成画布
由下可知,执行程序,生成一个以笔记本屏幕的左上角为原点,向右为x轴正方向,向下为y轴正方向的平面直角坐标系。参数宽高可以指定画布的宽高,从x,指的是x坐标,也就是画布左上角那一点的x轴坐标,即坐标与Y轴的距离。y同理。
2.运动
在设置好画布之后,就要画图案了,那么请注意,turtle模块的画图,都是以箭头(小海龟)为基础的,
在我们要画图的时候,运动操作都是在当前箭头位置基础上经行修改
操纵海龟绘图有着许多的命令,这些命令可以划分为两种:一种为运动命令,一种为画笔控制命令
下面为运动命令:
t.forward(distance) 向当前画笔方向移动distance像素长度 = t.fd(distance)
执行程序,打开画布,从左至右快速生成箭头
turtle.left(degree) 逆时针旋转degree度
turtle.goto(x,y) 将画笔移动到坐标为x,y的位置。由图可知,它是以画笔起始点为原点,向右为x轴正方向,向上为y轴正方向构成平面直角坐标系。画笔先是向当前方向走了50像素,(好像当前方向默认是从画布中点开始,向右为起始方向),然后left向左转90度,当转90度时,只是能看到箭头指向上了,当它再次goto时,是让画笔走向goto的坐标点,画笔当前坐标和goto坐标的连线就是画笔的行走路线。goto的坐标就是按照刚才说的那个坐标系。
现在让goto去的坐标如下(150,50),当它远离x轴时开始,这里能形成一个直角三角形,宽50(距离x轴距离),高100(距离y轴距离-50)。当画笔停止时,画笔的方向还是朝上的,没有改变方向
给加了个速度,但是没看出速度的变化是什么样子,反正是都很快
画圆的时候,角度变了180度,这是画圆时设置的角度大小
setx,移动画笔x轴坐标,不改变y轴坐标
将画笔当前y轴移动到指定位置,x轴坐标不变
设置当前画笔位置为原点,朝向东。
绘制一个指定直径和颜色的圆点
这个角度是逆时针旋转135度,应该只是从当前角度开始旋转吧,这里的东方向应该是0度和360度
注意移动的时候是会有痕迹的
就介绍这些,下面我们给出运动命令操作表
而如果要移动画笔而不留痕迹,比如在其他位置进行绘画,可以用
t.up() 画笔抬起,移动时不绘制图形
可以看到这时候后退是没有痕迹的
这就涉及到了画笔控制命令
down()
画笔落下,移动时绘制图形
up()
画笔抬起,移动时不绘制图形
reset()
恢复所有设置
pensize(width)
画笔的宽度
pencolor(colorstring)
画笔的颜色
fillcolor(colorstring)
绘制图形的填充颜色
turtle.filling() 返回当前是否在填充状态
turtle.begin_fill() 准备开始填充图形
turtle.end_fill() 填充完成
turtle.hideturtle() 隐藏画笔的turtle形状
turtle.showturtle() 显示画笔的turtle形状
海龟向右(right)转,或者让它后退(backward)。我们可以用向上(up)来把笔从纸上抬起来(换句话说就是让海龟停止作画),用向下(down)来开始作画。
这样可以很简单的画出一个平行线
最后还有几个控制画布的命令
turtle.clear()
清空turtle窗口,但是turtle的位置和状态不会改变
turtle.reset()
清空窗口,重置turtle状态为起始状态
turtle.undo()
撤销上一个turtle动作
stamp()
绘制(复制)当前图形
注意clear和reset的区别,clear(画笔)海龟还是在原位置不变,只清除屏幕,reset则是全部重置
扩展知识:
我们可以创建多个画笔,来分别进行不同操作
实列演示:
绘制五角星
import turtle #导入画图模块
import time #导入时间模块
t = turtle.Turtle()
turtle.screensize(1000,1000) #定义画布大小
t.pensize(10) # 定义画笔的宽度
t.pencolor("yellow") # 定义画笔颜色
t.fillcolor("red") # 定义填充颜色
t.begin_fill() # 开始填充图像
for i in range(5): # 五角星循环五次
t.forward(500)
t.right(144) # 右转144°
t.end_fill() # 停止填充
time.sleep(2) # 阻塞两秒
t.penup() # 提起笔,移动时不绘制图形
t.goto(-150, 120) # 将画笔移动到某坐标点
t.color("violet")
t.write("Z小旋", font=('Arial', 40, 'normal')) # 设置文字和字体
效果图
绘制心形
import turtle
t = turtle.Turtle()
def curvemove():
for i in range(200):
t.right(1)
t.forward(1)
t.speed(5)#设置画笔速度
t.color('red','pink')
t.begin_fill() #开始填充
t.left(140)
t.forward(111.65)
curvemove()
t.left(120)
curvemove()
t.forward(111.65)
t.end_fill() #结束填充
t.up() #抬起画笔
t.goto(-250, 100) # 将画笔移动到某坐标点
t.color("violet")
t.write("Z小旋", font=('Arial', 40, 'normal')) # 设置文字和字体
效果图
2.1螺旋线绘制案例
2.1.1代码
#导出模块
import turtle
import time
#定义速度
turtle.speed("fastest")
#定义笔芯大小
turtle.pensize(2)
#函数条件
#每次画的长度是变量x的2倍,每次逆时针旋转90度。
for x in range(100):
turtle.forward(2*x)
turtle.left(90)
#画面停留时间为3秒
time.sleep(3)
2.1.2 效果图
2.2彩色螺旋线的绘制
2.2.1代码
#导出模块
import turtle
import time
#画笔的大小
turtle.pensize(2)
#背景黑色
turtle.bgcolor("black")
#定义颜色
colors = ["red","yellow",'purple','blue']
#图形轨迹
turtle.tracer(False)
#函数条件
for x in range(400):
turtle.forward(2*x)
turtle.color(colors[x % 4])
turtle.left(91)
turtle.tracer(True)
#图片停留时间15秒
time.sleep(15)
2.2.2 效果图
参考链接:https://blog.csdn.net/as480133937/article/details/88592426
https://www.cnblogs.com/chen0307/articles/9645138.html
https://blog.csdn.net/weixin_40840880/article/details/102730024
turltle模块详解的更多相关文章
- Python中操作mysql的pymysql模块详解
Python中操作mysql的pymysql模块详解 前言 pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同.但目前pymysql支持python3.x而后者不支持 ...
- python之OS模块详解
python之OS模块详解 ^_^,步入第二个模块世界----->OS 常见函数列表 os.sep:取代操作系统特定的路径分隔符 os.name:指示你正在使用的工作平台.比如对于Windows ...
- python之sys模块详解
python之sys模块详解 sys模块功能多,我们这里介绍一些比较实用的功能,相信你会喜欢的,和我一起走进python的模块吧! sys模块的常见函数列表 sys.argv: 实现从程序外部向程序传 ...
- python中threading模块详解(一)
python中threading模块详解(一) 来源 http://blog.chinaunix.net/uid-27571599-id-3484048.html threading提供了一个比thr ...
- python time 模块详解
Python中time模块详解 发表于2011年5月5日 12:58 a.m. 位于分类我爱Python 在平常的代码中,我们常常需要与时间打交道.在Python中,与时间处理有关的模块就包括: ...
- python time模块详解
python time模块详解 转自:http://blog.csdn.net/kiki113/article/details/4033017 python 的内嵌time模板翻译及说明 一.简介 ...
- 小白的Python之路 day5 time,datatime模块详解
一.模块的分类 可以分成三大类: 1.标准库 2.开源模块 3.自定义模块 二.标准库模块详解 1.time与datetime 在Python中,通常有这几种方式来表示时间:1)时间戳 2)格式化的时 ...
- 小白的Python之路 day5 random模块和string模块详解
random模块详解 一.概述 首先我们看到这个单词是随机的意思,他在python中的主要用于一些随机数,或者需要写一些随机数的代码,下面我们就来整理他的一些用法 二.常用方法 1. random.r ...
- Python中time模块详解
Python中time模块详解 在平常的代码中,我们常常需要与时间打交道.在Python中,与时间处理有关的模块就包括:time,datetime以及calendar.这篇文章,主要讲解time模块. ...
- Ansible安装部署及常用模块详解
Ansible命令使用 Ansible语法使用ansible <pattern_goes_here> -m <module_name> -a <arguments> ...
随机推荐
- OpenHarmony Liteos_A内核之iperf3移植心得
一.iperf3工作原理 iperf3主要的功能是测试基于特定路径的带宽,在客户端和服务器端建立连接(三次握手)后,客户端发送一定大小的数据报并记下发送的时间,或者客户端在一定的时间内发送数据并记下发 ...
- Chrome浏览器前端开发调试时强制更新js、css静态资源文件缓存的方法
以Chrome浏览器为例,国产浏览器未做全面测试.前端开发静态文件时,浏览器访问会缓存样式.图片.js等,怎么快速更新缓存. 以下方法特别适合只想清除某个网页的缓存,而不想清除全部浏览器缓存可以采用以 ...
- 上新啦!KIT!
上新啦!KIT!近期KIT上新榜单请查收~ 商业推广深度转化事件回传助力用户精细运营,健康数据开放提升运动健康服务体验.手语服务新增非手控部分-- 更多功能请点击 了解更多详情>> 访问华 ...
- 如何在HarmonyOS对数据库进行备份,恢复与加密
数据库备份与恢复 场景介绍 当应用在处理一项重要的操作,显然是不能被打断的.例如:写入多个表关联的事务.此时,每个表的写入都是单独的,但是表与表之间的事务关联性不能被分割. 如果操作的过程中出现问题, ...
- stack-c++
#include <iostream> using namespace std; template <typename T> class Stack{ private: int ...
- jenkins 持续集成和交付——一个java构件小栗子(四)
前言 介绍一下java 构建的小栗子. 正文 maven 管理 java 是用maven 管理包的,那么我们是要安装maven的. 还是那句话,安装这种东西呢,去官网下载然后自己安装,不要用yum a ...
- 力扣441(java&python)-排列硬币(简单)
题目: 你总共有 n 枚硬币,并计划将它们按阶梯状排列.对于一个由 k 行组成的阶梯,其第 i 行必须正好有 i 枚硬币.阶梯的最后一行 可能 是不完整的. 给你一个数字 n ,计算并返回可形成 完整 ...
- Alibaba Cloud Linux 2 LTS 正式发布,提供更高性能和更多保障
Alibaba Cloud Linux 2 LTS版本发布后,阿里云将会为该版本提供长达5年的软件维护.问题修复服务.从2019-03-27开始到2024-03-31结束.包括: 免费的服务和支持:A ...
- “让专业的人做专业的事”,畅捷通与阿里云的云原生故事 | 云原生 Talk
简介: 如何借助阿里云强大的 IaaS 和 PaaS 能力去构建新一代的 SaaS 企业应用,从而给客户提供更好.更强的服务,这是畅捷通一直在思考和实践的方向.最终,畅捷通选定阿里云企业级分布式应用服 ...
- Spring Boot 微服务性能下降九成!使用 Arthas 定位根因
简介: 接收到公司业务部门的开发反馈,应用在升级公司内部框架后,UAT(预生产)环境接口性能压测不达标. 背景 接收到公司业务部门的开发反馈,应用在升级公司内部框架后,UAT(预生产)环境接口性能压测 ...