Python绘图库Turtle详解(含丰富示例)_第1页
Python绘图库Turtle详解(含丰富示例)_第2页
Python绘图库Turtle详解(含丰富示例)_第3页
Python绘图库Turtle详解(含丰富示例)_第4页
Python绘图库Turtle详解(含丰富示例)_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Python绘图库之Turtle理论与实践手把手教你学Python

Turtle库是Python中自带的用于绘制图形、图像的函数库。原理非常简单:在绘图窗口的正中间,有一只小海龟,用户通过一些指令可以控制小海龟在绘图区域上移动的方向和距离,记录小海龟的移动轨迹,即可完成图形、图像的绘制。Turtle库简介Turtle库中提供了大量的函数,除了可以控制小海龟的行为外,还可以设置绘图区域的大小、位置,线条的颜色、样式,填充的位置、颜色等,此外,还提供了一些常见图形的绘制,如圆、多边形等。通过Turtle可以绘制下图所示的一些经典效果。Turtle绘图绘图窗口大小与位置turtle.setup(width,height,startx,starty):设置窗体的大小和位置,width为窗体的宽度,height为窗体的高度,既可以是绝对像素,也可以是屏幕的百分比,startx、starty为窗体左上角的位置坐标,如右图所示,原点在左上角,水平方向向右为正,垂直方向向下为正;默认时,width=0.5,height=0.75;注意:窗体大小并不是绘图区域(画布)的大小,默认时,画布的宽度为400像素,高度为300像素,当窗体小于画布时,将会出现滚动条;turtle.screensize(canvwidth,canvheight,bg),设置画布的宽度(单位为像素)、高度、背景颜色;turtle.screensize(400,300,bg="red")turtle.setup(0.8,0.8)#屏幕比例

turtle.setup(200,100)#绝对像素位置坐标与移动位置坐标系如右图所示,坐标原点在正中间,水平向右为正,垂直向上为正,注意与前面屏幕坐标系的区别;位置坐标系turtle.setx(坐标值):设置海龟的x轴坐标值,这里是绝对位置,即与海龟之前的坐标无关;turtle.sety(坐标值):设置海龟的y轴坐标值,这里是绝对位置,即与海龟之前的坐标无关;turtle.goto(x坐标,y坐标):将海龟移动到横坐标为x,纵坐标为y的位置,方向保持不变;turtle.home():让海龟恢复初始状态,即位于原点,方向朝右,注意与turtle.goto(0,0)之间的区别;turtle.forward(距离)(别名:turtle.fd):沿着海龟方向前进指定距离,距离可以为负数,表示后退指定距离,等价于backward()方法;turtle.backward(距离)(别名:turtle.bk):沿着当前海龟方向后退指定距离,距离可以为负数,表示前进指定距离,等价于forward()方法;注意:移动海龟或改变海龟的坐标时,不会改变其方向。方向与角度turtle.setheading(角度)(别名:turtle.seth):设置海龟前进方向对应的角度,该角度是绝对的角度值,即与当前方向无关。turtle.right(角度)(别名:turtle.rt):海龟顺时针旋转指定角度即右转,角度是相对值,相对于当前方向;turtle.left(角度)(别名:turtle.lt):海龟逆时针移动指定角度即左转,角度是相对值,相对于当前方向;turtle.mode(mode=None):设置模式,并执行重置。有两种模式:“standard”和“logo”,“standard”模式表示初始朝向为右,正角度为逆时针(默认采用该模式),“logo”模式表示初始朝向为上,正角度为顺时针。角度坐标系方向坐标系简单案例效果观察不同模式下,前进50,设置角度为90度,再前进50的效果“logo”模式turtle.mode("logo")

turtle.forward(50)

turtle.setheading(90)

turtle.forward(50)观察前进50

或前进-50或

后退50

后退-50的效果前进50前进-50后退-50后退50观察右转90度或右转-90度或左转90度或左转-90度后,前进50的效果右转90度右转-90度左转90度左转-90度默认模式turtle.forward(50)

turtle.setheading(90)

turtle.forward(50)绘制正多边形绘制边长为50的正方形思路:沿着当前方向前进50,然后右转90度,继续前进50,依次类推,总共执行4次即可。foriinrange(4):

turtle.forward(50)#前进50

turtle.right(90)#右转90度绘制边长为50的正三角形思路:沿着当前方向前进50,然后左转120度,继续前进50,依次类推,总共执行3次即可。请动手尝试绘制边长为50的正五边形、正六边形,并总结绘制正多边形的规律。foriinrange(3):

turtle.forward(50)#前进50

turtle.left(120)#左转120度设置颜色turtle.colormode():设置颜色的模式,取值为255整数或1.0小数,默认为小数模式,即通过0-1之间的小数分别表示R、G、B三种颜色,设置为255整数模式时,可通过0-255之间的整数表示R、G、B三种颜色。turtle.color(画笔色,填充色):同时设置画笔颜色和填充色,当只传递一个参数时,表示画笔色和填充色相同;turtle.pencolor(颜色):设置画笔颜色;turtle.fillcolor(颜色):设置填充颜色;默认情况下,画笔色和填充色都是黑色,在程序执行过程中可以多次设置画笔色和填充色,颜色设置后只会影响后续绘图效果,不会影响之前的效果。使用turtle绘图时,离不开颜色的支持,颜色既可以通过一些常见的颜色单词表示,如red、green、blue等,也可以通过代表RGB三原色的元组表示。在turtle库中提供了多个方法用于设置颜色,包括设置颜色模式、设置画笔颜色、设置填充颜色等。默认为小数模式turtle.pencolor(0.2,0.8,0.4)使用整数模式turtle.colormode(255)

turtle.pencolor(60,120,200)turtle.color("red","blue")

turtle.color("red")turtle.color("red","blue")

turtle.pencolor("red")VS下面两段代码效果有何区别?绘制填充区域turtle.begin_fill():设置开始填充;turtle.end_fill():设置填充结束;绘图时,经常需要会遇到某一块连续区域颜色相同的情况,这时候就需要用到填充。绘制填充时,只需要指定起始位置、结束位置以及填充颜色。绘制时,如果起点和终点没有重合,程序会自动将其连接,从而形成封闭区域。相关方法如下:为前面的正方形添加填充效果,效果如图所示。为了看清楚边框,设置画笔粗细为3像素,画笔颜色为红色,填充色为蓝色。turtle.color(‘red’,‘blue’)

turtle.pensize(3)#设置画笔粗细turtle.begin_fill()#开始填充

foriinrange(4):#执行

4

次循环

turtle.fd(50)#向前50

turtle.rt(90)#右转

90度

turtle.end_fill()#结束填充

turtle.done()#完成绘图,停留在界面动手试一试,绘制如图所示五角星效果,画笔粗细为3像素,边长为80,画笔颜色为红色,填充色为蓝色。(提示:只需在正方形填充代码中修改几个参数即可)画笔的一些设置在绘图过程中,经常需要对画笔进行设置,例如设置画笔的粗细、颜色,移动画笔等,在turtle库中针对这些操作提供了相应的方法。turtle.pensize(画笔粗细)(别名turtle.width):设置画笔粗细,默认为1;turtle.penup()(别名turtle.pu、turtle.up):提起画笔,此时对画笔的操作不会在绘图区域留下痕迹,常用于从一个新的地方开始绘图;turtle.pendown()(别名turtle.pd、turtle.down):放下画笔,此时,对画笔的操作将会在绘图区域留下痕迹;turtle.shape(形状):用于指定指针的形状,取值为:‘arrow’,‘blank’,‘circle’,‘classic’,‘square’,‘triangle’,‘turtle’,默认为classic”;(可通过turtle.getshapes()方法获取)

turtle.hideturtle()(别名turtle.ht):隐藏画笔的指针形状;turtle.showturtle()(别名turtle.st):显示画笔的指针形状;尝试实现上图所示效果,界面上有两个大小和样式一样的五角星,只是位置不同,绘制结束后不显示指针。(提示:两个五角星之间存在一定的间距,需要移动画笔)绘制不连续图形案例turtle.color('red','blue')#设置画笔和填充颜色

turtle.pensize(3)#设置画笔粗细,单位为像素

turtle.begin_fill()#开始填充

foriinrange(5):#执行5次循环,绘制五角星

turtle.fd(80)#向前80

turtle.rt(144)#右转144度

turtle.penup()#提前画笔

turtle.goto(-100,0)#移动到一个新的位置

turtle.pendown()#放下画笔

turtle.begin_fill()#开始填充

foriinrange(5):#执行5次循环

turtle.fd(80)#向前200

turtle.rt(144)#右转144度

turtle.end_fill()#结束填充

turtle.hideturtle()#隐藏指针

turtle.done()#完成绘图,停留在界面,没有该方法会直接退出尝试实现上图所示效果,界面上有两个大小和样式一样的五角星,只是位置不同,五角星边长为80,边框颜色为红色,填充色为蓝色,边框粗细为3,绘制结束后不显示指针。(提示:两个五角星之间存在一定的间距,需要移动画笔)关键代码参考一些基本形状绘制turtle.dot(直径,颜色):绘制一个指定直径和颜色的圆点,不带边框。turtle.circle(半径,extent=角度,steps=内切正多边形边数):半径为正数时,表示沿当前方向逆时针画圆,半径为负数时,表示沿当前方向顺时针画圆;指定角度时,则画弧度,steps参数用于指定圆内切多边形,当为弧度时,多边形不封闭;turtle.begin_poly():开始记录多边形的顶点。当前的乌龟位置是多边形的第一个顶点;turtle.end_poly():停止记录多边形的顶点。当前的乌龟位置是多边形的最后一个顶点,将会和开始顶点连接;turtle.get_poly():返回最后记录的多边形;turtle.clear():清空turtle窗口,但turtle的位置和状态不会改变;turtle.reset():清空窗口,重置turtle状态为起始状态;turtle.undo():撤销上一个turtle动作;尝试实现下图所示效果,绘制多个圆内切正多边形,从三边形一直到九边形。圆的半径为40,绘制完成一个形状后前进100。turtle.pensize(3)#设置画笔宽度为3

turtle.color(‘blue’,‘red’)

turtle.begin_fill()#开始填充

turtle.forward(-400)

foriinrange(3,10):

turtle.circle(40,steps=i)

turtle.forward(100)#前进100像素

turtle.circle(40)#画圆

turtle.end_fill()#结束填充海龟

turtle.hideturtle()#隐藏海龟

turtle.done()#结束,停留在界面上其他一些实用方法turtle.write(文本内容,align=“left”,font=(“Arial”,8,“normal”)

):绘制字符串,align参数用于设置对其方式,font参数用于设置字体,包括字体名称、字体大小、字体样式,align参数和font参数都有默认值;turtle.position()(别名turtle.pos):返回当前的位置距离原点的距离。turtle.speed(速度):设置画笔移动速度,取值范围为[0,10]整数,数字越大越快;turtle.tracer(False):关闭动画,默认会有动画效果。实现下图所示效果,在界面上显示当前的时间,并随时间动态变化。(提示:时间的格式化,内容动态更新)importturtle

importtime

turtle.pencolor("red")#设置画笔颜色

turtle.hideturtle()#隐藏指针

turtle.tracer(False)#关闭动画,否则会看到明显的刷新效果

whileTrue:#死循环

s_time=time.strftime("%Y-%m-%d%H:%M:%S")#时间格式化字符串

turtle.write(s_time,align="center",font=("Arial",24,"italic"))

#绘制字符串,居中显示,同时设置字体大小和样式

time.sleep(1)#休眠1秒

turtle.clear()#清空已有内容

turtle.done()#绘制完成一些经典案例效果绘制下图所示18*18棋盘效果,思路:绘制19条横线,19条竖线,相邻横线、相邻竖线之间的间隔相同,绘制完一条横线或竖线后要抬起画笔,移动到一个新的位置。importturtle

turtle.pensize(2)#设置画笔大小

width=15#每个单元格的边长

turtle.speed("fastest")#设置画笔速度

foriinrange(0,19):#循环画横线

turtle.penup()#抬起画笔

turtle.goto(0,i*width)#调整位置

turtle.pendown()#按下画笔

turtle.forward(18*width)#画线

turtle.left(90)#左转90度

foriinrange(0,19):#循环画竖线

turtle.penup()#抬起画笔

turtle.goto(i*width,0)#调整位置

turtle.pendown()#按下画笔

turtle.forward(18*width)#画线

turtle.hideturtle()#隐藏指针

turtle.done()#绘制完成,停留在界面上一些经典案例效果绘制下图所示太阳花效果,思路:不断画等长的线段,然后每次画完后偏移一定的角度,直到有线段重合。(偏移的角度不同,最终的效果也会不同)importturtle

turtle.color('red','yellow')#设置画笔颜色和填充颜色

turtle.begin_fill()#开始填充图形

turtle.pensize(2)#设置画笔大小

turtle.speed("normal")#设置绘画速度

whileTrue:#做循环

turtle.forward(200)#画笔前进200个像素

turtle.left(170)#左转170度

ifabs(turtle.pos())<1:#判断画笔是否回到起点

break

turtle.end_fill()#结束填充图形

turtle.hideturtle()#隐藏画笔指针

turtle.done()#完成绘画一些经典案例效果绘制如图所示七彩小蛇效果。分析:小蛇的身体扭来扭去主要是通过画弧度实现,这里的半径和弧度根据用户偏好自行设置。(提示:小蛇身体的粗细通过设置画笔粗细实现,不需要进行填充)importturtle

turtle.penup()#提起画笔

turtle.setx(-200)#设置初始时x的位置

turtle.pendown()#放下画笔

turtle.pensize(20)#设置画笔大小

turtle.right(40)#右转40度

foriinrange(4):#循环画身体

turtle.pencolor("red")#画笔颜色为红色

turtle.circle(40,80)#画弧度

turtle.pencolor("green")#画笔颜色为绿色

turtle.circle(-40,80)#画弧度

turtle.circle(40,40)#画弧度

turtle.pencolor("cyan")#画笔颜色为青色

turtle.forward(40)#前进

turtle.pencolor("black")#画笔颜色为黑色

turtle.circle(16,180)#画半圆

turtle.pencolor("purple")#画笔颜色为紫色

turtle.fd(40/3)#前进

turtle.done()#停留在最后页面一些经典案例效果绘制下方左图所示心形效果,心形绘制原理如下方右图图所示,心形大致由两条线段以及两个半圆弧组成,线段的长度刚好为半圆弧的直径,在绘制过程中注意方向的变化。心形画法分析图实际效果图importturtle

radius=80

turtle.color("red","pink")#设置画笔颜色和填充色

turtle.pensize(2)#设置画笔大小

turtle.begin_fill()#开始填充

turtle.left(45)#左转45度

turtle.fd(2*radius)#前进

turtle.circle(radius,180)#画半圆

turtle.right(90)#右转90度

turtle.circle(radius,180)#画半圆

turtle.fd(2*radius)#前进200像素

turtle.end_fill()#结束填充

turtle.hideturtle()#隐藏指针

turtle.done()#结束,停留在当前界面思考如何同时绘制多个心形?更多参考代码关注微信公众号:Python资源分享,回复turtle

即可获取。一些经典案例效果绘制如图所示阴阳八卦图效果,分析:该图主要是由一些圆弧组成,核心是画圆和圆弧,关键是要把握方向,从效果图来看,这是一个对称的图,所以只要画出了左半部分,右半部分只要改一下方向和位置即可。左半部分由两部分组成:黑色填充和白色小圆,黑色填充部分由三部分线条围成:小圆半圆弧、大圆半圆弧、小圆半圆弧。代码参考如下。deffill_half(left=1):#绘制半个填充部分

turtle.home()#回到初始状态

turtle.begin_fill()#开始填充黑色

turtle.circle(radius/2,180)#画小半圆

turtle.circle(radius,left*180)#画大半圆

turtle.circle(radius/2,-180)#画小半圆

turtle.end_fill()#结束填充defdraw_small_circle(up=1):#绘制中间的小圆

turtle.home()#回到初始状态

turtle.begin_fill()#开始填充黑色

turtle.penup()#抬起画笔

turtle.sety(up*0.35*radius)#设置y轴坐标

turtle.pendown()#放下画笔

turtle.circle(up*0.15*radius)#画圆

turtle.end_fill()#结束填充

turtle.hideturtle()#隐藏指针radius=200#大圆的半径

turtle.width(3)#画笔粗细

turtle.speed("fast")#设置画笔速度

turtle.color("black")#画笔和填充色都为黑色

fill_half(left=1)#绘制左半部分填充

turtle.color("white")#画笔和填充色都为白色

draw_small_circle(up=1)#绘制左半部分中的圆

turtle.color("black","white")#画笔和填充色都为黑色

fill_half(left=-1)#绘制下半部分填充

turtle.color("black")#画笔和填充色都为黑色

draw_small_circle(up=-1)#绘制下半部分中的圆

turtle.done()#绘画结束,停留在当前界面

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论