Python绘图Turtle库详解

 转载:https://blog.csdn.net/zengxiantao1994/article/details/76588580

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、太阳花
 


# coding=utf-8import turtleimport time# 同时设置pencolor=color1, fillcolor=color2turtle.color("red", "yellow")turtle.begin_fill()for _ in range(50):turtle.forward(200)turtle.left(170)turtle.end_fill()turtle.mainloop()

 

2、五角星


# coding=utf-8import turtleimport timeturtle.pensize(5)turtle.pencolor("yellow")turtle.fillcolor("red")turtle.begin_fill()for _ in range(5):turtle.forward(200)turtle.right(144)turtle.end_fill()time.sleep(2)turtle.penup()turtle.goto(-150,-120)turtle.color("violet")turtle.write("Done", font=('Arial', 40, 'normal'))turtle.mainloop()

3、时钟程序


# coding=utf-8import turtlefrom datetime import *# 抬起画笔,向前运动一段距离放下def Skip(step):turtle.penup()turtle.forward(step)turtle.pendown()def mkHand(name, length):# 注册Turtle形状,建立表针Turtleturtle.reset()Skip(-length * 0.1)# 开始记录多边形的顶点。当前的乌龟位置是多边形的第一个顶点。turtle.begin_poly()turtle.forward(length * 1.1)# 停止记录多边形的顶点。当前的乌龟位置是多边形的最后一个顶点。将与第一个顶点相连。turtle.end_poly()# 返回最后记录的多边形。handForm = turtle.get_poly()turtle.register_shape(name, handForm)def Init():global secHand, minHand, hurHand, printer# 重置Turtle指向北turtle.mode("logo")# 建立三个表针Turtle并初始化mkHand("secHand", 135)mkHand("minHand", 125)mkHand("hurHand", 90)secHand = turtle.Turtle()secHand.shape("secHand")minHand = turtle.Turtle()minHand.shape("minHand")hurHand = turtle.Turtle()hurHand.shape("hurHand")for hand in secHand, minHand, hurHand:hand.shapesize(1, 1, 3)hand.speed(0)# 建立输出文字Turtleprinter = turtle.Turtle()# 隐藏画笔的turtle形状printer.hideturtle()printer.penup()def SetupClock(radius):# 建立表的外框turtle.reset()turtle.pensize(7)for i in range(60):Skip(radius)if i % 5 == 0:turtle.forward(20)Skip(-radius - 20)Skip(radius + 20)if i == 0:turtle.write(int(12), align="center", font=("Courier", 14, "bold"))elif i == 30:Skip(25)turtle.write(int(i/5), align="center", font=("Courier", 14, "bold"))Skip(-25)elif (i == 25 or i == 35):Skip(20)turtle.write(int(i/5), align="center", font=("Courier", 14, "bold"))Skip(-20)else:turtle.write(int(i/5), align="center", font=("Courier", 14, "bold"))Skip(-radius - 20)else:turtle.dot(5)Skip(-radius)turtle.right(6)def Week(t):   week = ["星期一", "星期二", "星期三","星期四", "星期五", "星期六", "星期日"]return week[t.weekday()]def Date(t):y = t.yearm = t.monthd = t.dayreturn "%s %d%d" % (y, m, d)def Tick():# 绘制表针的动态显示t = datetime.today()second = t.second + t.microsecond * 0.000001minute = t.minute + second / 60.0hour = t.hour + minute / 60.0secHand.setheading(6 * second)minHand.setheading(6 * minute)hurHand.setheading(30 * hour)turtle.tracer(False) printer.forward(65)printer.write(Week(t), align="center",font=("Courier", 14, "bold"))printer.back(130)printer.write(Date(t), align="center",font=("Courier", 14, "bold"))printer.home()turtle.tracer(True)# 100ms后继续调用tickturtle.ontimer(Tick, 100)def main():# 打开/关闭龟动画,并为更新图纸设置延迟。turtle.tracer(False)Init()SetupClock(160)turtle.tracer(True)Tick()turtle.mainloop()if __name__ == "__main__":main()

转载于:https://www.cnblogs.com/chmusk/p/11078918.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/277796.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mac使用brew update无反应解决办法

为什么80%的码农都做不了架构师?>>> mac系统中使用brew作为包管理工具,类似centos中的yum,ubuntu中的apt-get,在使用brew update的使用,有时候会长时间无反应,或者中途断开连接,这是…

2018-2019-2 20175223 实验三《敏捷开发与XP实践》实验报告

目录 北京电子科技学院(BESTI)实验报告实验名称:实验三 敏捷开发与XP实践实验内容、步骤与体会:一、实验三 敏捷开发与XP实践-1二、实验三 敏捷开发与XP实践-2三、实验三 敏捷开发与XP实践-3四、实验三 敏捷开发与XP实践-4五、代码…

(八)路径(面包屑导航)分页标签和徽章组件

一&#xff0e;路径组件 路径组件也叫做面包屑导航。 <ol class"breadcrumb"><li><a href"#">首页</a></li><li><a href"#">产品列表</a></li><li><a href"#">大…

python之爬虫(四)之 Requests库的基本使用

什么是Requests Requests是用python语言基于urllib编写的&#xff0c;采用的是Apache2 Licensed开源协议的HTTP库如果你看过上篇文章关于urllib库的使用&#xff0c;你会发现&#xff0c;其实urllib还是非常不方便的&#xff0c;而Requests它会比urllib更加方便&#xff0c;可以…

win8下cocos2dx-3.2+VS2012环境配置及项目创建

这是本人CSDN的第一篇博客&#xff0c;因为假期在学校做实训项目接触到了cocos2dx&#xff0c;觉得是一个特别适用强大&#xff0c;有不错的可移植性&#xff08;虽然可移植性不错&#xff0c;但实际上写好的游戏往Android上移植&#xff0c;我的队友废了好大劲。。。&#xff…

Mac系统下Homebrew的安装和使用Homebrew安装python

这里向大家推荐一个东西&#xff0c;Mac下很好用的东西&#xff0c;叫做Homebrew。刚开始接触Mac的时候&#xff0c;我也没听过这个东西&#xff0c;但装了以后真的觉得&#xff0c;TMD太碉堡了。引用一句话&#xff1a;Homebrew is the easiest and most flexible way to inst…

Mac下cocos2dx-3.2+Xcode环境配置和项目创建

这是有关环境配置的第二篇教程&#xff0c;第一篇讲的是win8下的环境配置。这里我们使用C。所有如果你用其他语言如Lua和js进行cocos2d开发&#xff0c;那么可以再找一找其他的配置文档。下面要说Mac os 下 cocos2dx-3.2Xcode的环境配置&#xff0c;这里我使用的是Xcode 5.1.1。…

Mac OS使用技巧之一:查看Finder中的.bash_profile等系统隐藏文件

作为一个程序员&#xff0c;经常要配置变量&#xff0c;可能要更改hosts文件&#xff0c;或者你闲着没事儿寻找homebrew给你安装的东西在什么地方。Mac OS的内核是Unix&#xff0c;Linux/Unix系统出于系统安全和用户安全的考虑&#xff0c;会把一些与系统相关的文件隐藏&#x…

win8下cocos2dx3.2移植android平台及代码打包APK

cocos2dx程序不能只在VS2012下运行&#xff0c;迟早是要搬运到Android和IOS上的。Windows下移植IOS平台先搁下不说比较困难&#xff0c;而且只有越狱的苹果机才可以运行&#xff0c;而且毕竟IOS高端、小众。这里主要讲一下移植Android&#xff0c;windows下cocos2dx打包成APK和…

【转】用Fiddler做抓包分析详解

1.为什么是Fiddler? 抓包工具有很多&#xff0c;小到最常用的web调试工具firebug&#xff0c;达到通用的强大的抓包工具wireshark.为什么使用fiddler?原因如下&#xff1a; a.Firebug虽然可以抓包&#xff0c;但是对于分析http请求的详细信息&#xff0c;不够强大。模拟http…

Mac下cocos2dx3.2移植android平台详细教程

本文是cocos2dx移植android的第二篇教程&#xff0c;笔者深深感觉&#xff0c;cocos2dx移植android平台是永远的痛啊。。。下面讲一下笔者花费一个周研究的Mac OS下的cocos2dx3.2android配置首先要准备的东西&#xff08;1&#xff09;下载cocos2dx3.2 http://www.cocos2d-x.o…

robotframework(12)修改用户密码(从数据库查询短信验证码)

一、testcase&#xff1a;修改用户密码需要6个参数&#xff08;短信验证码、设置的新密码、用户已登录的userid及用户唯一标识、接口校验码、被修改的手机号&#xff09;&#xff0c;故先准备这些参数 二、用户登录请求&#xff0c;&#xff08;获取userid、用户唯一标识&#…

Mac OS使用技巧之二:修改变量Path解决android: command not found

前一阵子&#xff0c;一直在搞Mac OS和win8下cocos2dx移植android平台的方法。一步步从无到有的慢慢摸索出来。最近发现了一个小问题&#xff0c;有关环境变量配置的写下来分享给大家。就是我们在windows8下查看已有android SDK的版本&#xff0c;需要在CMD里面输入&#xff1a…

Jenkins架构

一. Master 和slave.下图阐述了master-slave交互的架构&#xff1a;在上面这个分布式的构建环境中&#xff0c;Jenkins master主要负责如下&#xff1a;接收构建触发&#xff08;比如&#xff0c;一个提交到GitHub后&#xff09;发送通知&#xff08;比如&#xff0c;在构建失败…

Mac OS使用技巧之三:发射无线网络信号的方法

许多人知道在windows下可以直接借助各种辅助软件来直接发射wifi信号&#xff0c;比如360wifi&#xff0c;猎豹wifi。或者可以直接在命令行里面设置。许多人却不知道Mac系统也有方便快捷发射无线信号的功能。下面讲一下利用Mac OS发射无线网络信号的方法。前提&#xff1a;你的电…

纪实:对CSDN博客系统的一些质疑

我是一个对编程充满热情的在校大学生&#xff0c;本来我是怀着满腔热情来到CSDN写博客&#xff0c;记录和分享自己的学习经历。却被这糟糕的博客系统一次次的泼冷水。写这篇博客确实是因为心中十分不甘和特别生气&#xff0c;所以我决定要把自己的遭遇写出来&#xff0c;我自己…

php框架之laravel

常见问题: 1. 访问网站500错误 这是因为laravel的缓存路径没有找到 laravel缓存文件路径是在 config/cache.php中设置&#xff0c;默认存在storage文件夹中 解决:需要保证storage/framework下面创建 sessions&#xff0c; views, cache 文件夹并确保可写权限 转载于:https://ww…

MySQL的命令合集

2019独角兽企业重金招聘Python工程师标准>>> MySQL客户端操作 $db$是数据库名称$table$是数据表名称$field$是数据表里的字段名称有些语句最后加上**/G**可以使结果更美观数据库相关 创建数据库,修改数据库 create database $db$; 使用默认设置create database $db$…

Mac OS使用技巧之四:修改打开不同格式视频的默认播放器

这里说一下视频播放的一些问题。大家知道Mac OS中有自带的一款播放器&#xff0c;叫做Quicktime Player。这已经是一款很牛X的软件了&#xff0c;但他的定位并不是单纯的视频播放软件&#xff0c;而是数字媒体制作平台&#xff0c;可以用于视频格式的转换&#xff0c;视频的录制…

爬取汽车之家新闻

爬取汽车之家新闻 伪造浏览器向某个地址发送Http请求&#xff0c;获取返回的字符串 response requests.get(url 地址)response.contentresponse.encoding apparent_encodingresponse.textbs4&#xff0c;解析HTML格式的字符串 soup BeautifulSoup(<html>...</html…