任务8-1:绘制五角星(课件)-《程序设计基础(Python)》同步教学(人民邮电版)

2024-08-19
| 69页
| 106人阅读
| 16人下载
普通

内容正文:

单元8 Python标准库 任务8-1:绘制五角星 【任务目标】 使用turtle库绘制图8-1所示的五角星。 【任务实施】 演示过程…… 8.1绘图工具:turtle库 本节主要内容: 窗体函数 画笔控制函数 画笔运动函数 形状函数 输入输出函数 事件处理相关函数 turtle库(也称海龟绘图库)提供了基本绘图功能,它起源于1969年诞生的Logo语言。 turtle库提供了简单、直观的绘图方法,Python接纳了turtle库,并将其作为标准库提供给用户。 turtle库的文件为turtle.py,其位于Python安装目录下的“Lib”子目录中。 绘图之前,应导入turtle模块。 例如: from turtle import * turtle库也称海龟绘图库,提供几何绘图功能,它最早在Logo语言中实现。因为简单、易用,Python将其作为标准库提供给用户。 turtle库在绘图窗口中完成绘图,绘图窗口的坐标系如图8-2所示。 默认情况下,绘图窗口的中心为坐标原点,x轴正方向为前进方向(即画笔的朝向),x轴负方向为后退方向;画笔的朝向的左侧为左侧方向,右侧为右侧方向。turtle库通过移动画笔完成绘图。 turtle库提供面向过程和面向对象两种接口。面向过程接口提供可直接调用的函数,面向对象接口本书不做介绍。 turtle库的面向过程接口提供的函数主要包括窗体函数、画笔控制函数、画笔运动函数、形状函数、输入输出函数以及事件处理函数等。所有函数的第一个参数默认为self,本书在介绍各个函数时均省略了该参数。 8.1.1 窗体函数 1.turtle.bye() 关闭绘图窗口,示例代码如下。 turtle.bye() 2.turtle.exitonclick() 单击时关闭绘图窗口,示例代码如下。 turtle.exitonclick() 3.turtle.setup(width, height, startx, starty) 设置绘图主窗口的大小和位置。各参数作用如下。 width:整数表示窗口宽度为多少像素;浮点数表示窗口宽度占屏幕的百分比(默认50%)。 height:整数表示窗口高度为多少像素;浮点数表示窗口高度占屏幕的百分比(默认75%)。 startx:正数表示窗口位置距离屏幕左边缘多少像素,负数表示距离屏幕右边缘的像素数,None(默认值)表示窗口水平居中。 starty:正数表示窗口位置距离屏幕上边缘多少像素,负数表示距离屏幕下边缘的像素数,None(默认值)表示窗口垂直居中。 示例代码如下。 >>> turtle.setup(200,180,0,0) #窗口大小200*180,位置在屏幕左上角 >>> turtle.setup(0.5,0.6) #窗口宽为屏幕50%,高为屏幕60%,位置在屏幕中央 4.turtle.screensize(canvwidth, canvheight, bg) 设置绘图窗口中画布的大小,无参数时返回画布大小。各参数的作用如下。 canvwidth:正整型数,以像素表示画布的新宽度值。 canvheight:正整型数,以像素表示画面的新高度值。 bg:颜色字符串,新的背景颜色。 示例代码如下。 >>> turtle.screensize(300,400) >>> turtle.screensize() (300, 400) turtle库中使用的颜色有3种表示方法。 颜色名称字符串:red、blue、yellow等。 十六进制颜色值字符串:#FF0000、#00FF00、#FFFF00等。 RGB颜色元组: 颜色元组格式为(r,g,b),r、g、b的取值范围为0~colormode。 colormode为颜色模式,取值为1或255。 turtle.colormode(n)函数设置颜色模式(n取值1或255)。 例如: 颜色模式为255:(255,0,0)、(0,210,0)、(155,215,0)等是有效的颜色元组 颜色模式为1时:(1,0,0)、(0,0.3,0)、(1,0.5,0)等是有效的颜色元组。 示例代码如下。 >>> turtle.screensize(300,400,'yellow') 5.turtle.bgcolor(*args) 设置背景颜色,无参数时返回当前背景颜色。 参数args是一个颜色字符串或颜色元组,或者是3个取值范围为0~colormode内的数值(即省略圆括号的颜色元组)。 示例代码如下。 >>> turtle.bgcolor((0.5,0,0)) >>> turtle.bgcolor() (0.5019607843137255, 0.0, 0.0) >>> turtle.bgcolor('red') >>> turtle.bgcolor() 'red' >>> turtle.bgcolor(0.6,0.3,0.7) 6.turtle.bgpic(picname=None) 设置背景图片或返回当前背景图片名称。 如果picname为一个以gif或png为后缀名的图片文件名,则将相应图片设为背景。 如果picname为“nopic”,则删除当前背景图片。 未提供参数时返回当前背景图片文件名。 示例代码如下。 >>> turtle.bgpic() 'nopic' >>> turtle.bgpic('back.png') 7.turtle.clear()和turtle.clearscreen() 从绘图窗口中删除全部绘图,将绘图窗口重置为初始状态: 白色背景 无背景图片 无事件绑定并启用追踪。 示例代码如下。 >>> turtle.clear() >>> turtle.clearscreen() 8.turtle.reset()和turtle.resetscreen() 将绘图窗口中的画笔重置为初始状态,示例代码如下。 >>> turtle.reset() >>> turtle.resetscreen() 9.turtle.window_height()和turtle.window_width() 返回绘图窗口的高度和高度,示例代码如下。 >>> turtle.window_height() 576 >>> turtle.window_width() 683 8.1.2 画笔控制函数 1.turtle.pendown()、turtle.pd()和turtle.down() 画笔落下,移动画笔时画线,示例代码如下。 >>> turtle.pendown() 2.turtle.penup()、turtle.pu()和turtle.up() 画笔抬起,移动画笔时不画线,示例代码如下。 >>> turtle.penup() 3.turtle.pensize(width=None)和turtle.width(width=None) 参数with为一个正数。 提供参数with时,将其设置为画笔大小,画笔大小决定线条粗细。 如未指定参数,则返回画笔的当前大小。 示例代码如下。 >>> turtle.pensize() 1 >>> turtle.pensize(5) 4.turtle.pen(pen=None, **pendict) 提供参数时设置画笔属性;未指定参数时返回画笔属性。 参数pen为字典。 pendict为一个或多个关键字参数,可用的关键字及其取值如下。 shown: 值为True(显示画笔形状)或False(不显示画笔形状)。 pendown:值为True(画笔落下)或False(画笔抬起)。 pencolor:值为颜色字符串或颜色元组,用于设置画笔颜色。 fillcolor:值为颜色字符串或颜色元组,用于设置填充颜色。 pensize:值为正数,用于设置画笔大小。 speed:值为0~10范围内的数,用于设置绘图速度。 resizemode:值为“auto”“user”或“noresize”,用于设置绘图窗口大小调整模式。 stretchfactor:值为“(正数值,正数值)”格式的元组,用于设置画笔裁剪比例。 outline:值为正数,用于设置轮廓宽度。 tilt:值为整数或小数,用于设置画笔倾斜角度。 示例代码如下。 >>> turtle.pen(fillcolor="yellow", pensize=5) #设置关键字参数 >>> turtle.pen({'shown':False,'tilt':15}) #使用字典参数 >>> turtle.pen() {'pencolor': 'black', 'shown': False, 'speed': 3, 'pendown': True, 'shearfactor': 0.0, 'resizemode': 'noresize', 'outline': 1, 'stretchfactor': (1.0, 1.0), 'tilt': 15, 'pensize': 5, 'fillcolor': 'yellow'} 5.turtle.isdown() 画笔落下时返回True,画笔抬起时返回False,示例代码如下。 >>> turtle.penup() >>> turtle.isdown() False >>> turtle.pendown() >>> turtle.isdown() True 6.turtle.pencolor(*args) 提供参数时设置画笔颜色,未提供参数时返回画笔颜色,示例代码如下。 >>> colormode() 1.0 >>> turtle.pencolor() 'red' >>> turtle.pencolor("blue") >>> turtle.pencolor() 'blue' >>> turtle.pencolor((0.3, 0.5, 0.6)) >>> turtle.pencolor('#FF00FF') 7.turtle.fillcolor(*args) 提供参数时设置填充颜色 未提供参数时返回填充颜色 示例代码如下。 >>> turtle.fillcolor("yellow") >>> turtle.fillcolor() ' yellow' 8.turtle.color(*args) 提供两个颜色参数,分别设置为画笔颜色和填充颜色; 未提供参数时返回画笔颜色和填充颜色。 示例代码如下。 >>> turtle.color() ('black', 'yellow') >>> turtle.color("red", "green") 9.turtle.filling() 返回填充状态,要填充是返回True,不填充时返回False。 10.turtle.begin_fill() 开始填充,在绘制填充形状之前调用。 11.turtle.end_fill() 结束填充,同时执行填充操作,填充调用begin_fill()之后绘制的封闭形状。 12.turtle.clone() 创建并返回画笔的克隆体,克隆体具有与画笔相同的位置、朝向和其他属性。 克隆得到的画笔可以设置与原画笔不同的属性,执行不同的绘图操作。 示例代码如下。 >>> t2=turtle.clone() turtle允许使用多个画笔,可调用Turtle()函数创建画笔, 示例代码如下。 >>> t3=turtle.Turtle() 8.1.3 画笔运动函数 8.1.3 画笔运动函数 1.turtle.forward(distance)和turtle.fd(distance) 画笔前进distance指定的距离,参数distance为像素值,不改变画笔的朝向,示例代码如下。 >>> turtle.forward(50) 2.turtle.back(distance)、turtle.bk(distance)和turtle.backward(distance) 画笔后退distance指定的距离,不改变画笔的朝向,示例代码如下。 >>> turtle.backward(50) 3.turtle.right(angle)和turtle.rt(angle) 画笔向右旋转angle个单位,单位默认为角度,可调用turtle.degrees()和turtle.radians()函数设置度量单位。 角度的正负由画笔模式确定,可调用turtle.mode()函数设置画笔模式。 函数turtle.degrees()将角度的度量单位设置为度,turtle.radians()将角度的度量单位设置为弧度。 示例代码如下。 >>> turtle.degrees() #设置角度单位为度 >>> turtle.heading() #画笔当前朝向 0.0 >>> turtle.right(60) #画笔向右旋转60度 >>> turtle.heading() 300.0 4.turtle.mode(mode=None) 设置或返回画笔模式(即画布的坐标系) 参数mode为字符串“standard”“logo”或“world”。“standard”模式与旧版本的turtle兼容,“logo”模式与大部分Logo画笔绘图兼容,“world”模式使用用户自定义的“世界坐标系”。 模式、画笔初始朝向和角度正负之间的关系如下。 standard模式:画笔初始朝右(东)、逆时针为角度正方向。 logo模式:画笔初始朝上(北)、顺时针为角度正方向。 示例代码如下。 >>> turtle.mode('logo') >>> turtle.heading() 0.0 >>> turtle.right(60) >>> turtle.heading() 60.0 5.turtle.left(angle)和turtle.lt(angle) 画笔向左旋转angle个单位,示例代码如下。 >>> turtle.left(45) 6.turtle.goto(x, y=None)、turtle.setpos(x, y=None)和turtle.setposition(x, y=None) 将画笔移动到绝对坐标的位置。 如果画笔已落下将画直线。不改变画笔的朝向。 同时提供参数x和y时,(x,y)为新坐标。省略参数y时,x为坐标向量。 示例代码如下。 >>> turtle.pos() #查看画笔当前位置 (0.00,0.00) >>> turtle.goto(20,30) #移动画笔到(20,30) >>> turtle.pos() (20.00,30.00) >>> turtle.goto((50,50)) #移动画笔到(50,50) 7.turtle.setx(x) 画笔水平移动,横坐标变为x,纵坐标保持不变,示例代码如下。 >>> turtle.pos() (50.00,50.00) >>> turtle.setx(100) >>> turtle.pos() (100.00,50.00) 8.turtle.sety(y) 画笔垂直移动,横坐标不变,纵坐标变为y,示例代码如下。 >>> turtle.pos() (100.00,50.00) >>> turtle.sety(100) >>> turtle.pos() (100.00,100.00) 9.turtle.setheading(to_angle)和turtle.seth(to_angle) 将画笔的方向设置为to_angle(注意由画笔模式决定具体方向) 示例代码如下。 >>> turtle.setheading(45) 10.turtle.home() 将画笔移至初始坐标(0,0),并设置方向为初始方向(由画笔模式确定),示例代码如下。 >>> turtle.pos() #当前位置 (100.00,100.00) >>> turtle.heading() #当前朝向 15.0 >>> turtle.home() #画笔回归原点,重置为初始朝向 >>> turtle.heading() 0.0 >>> turtle.pos() (0.00,0.00) 11.turtle.circle(radius, extent=None, steps=None) 绘制一个半径为radius的圆,圆心在画笔左侧radius个单位的位置。 参数radius为数值,extent为数值或None,steps为整数或None。 extent为一个角度,省略时绘制圆,指定extent参数时绘制指定角度的圆弧。 绘制圆弧时,如果radius为正值,则沿逆时针方向绘制圆弧,否则沿顺时针方向绘制圆弧。最终画笔的朝向由extent的值决定。 turtle库实际上是用内切正多边形来近似表示圆,其边的数量由steps指定。 省略steps参数时自动确定边数。此方法也可用来绘制正多边形。 示例代码如下。 >>> turtle.circle(50) #绘制半径为50的圆 >>> turtle.circle(100,180) #绘制半径为100的半圆 >>> turtle.circle(200,None,4) #绘制对角线长度为200的正方形 >>> turtle.circle(200,steps=6) #绘制对角线长度为200的正六边形 12.turtle.dot(size=None, *color) 绘制一个直径为size,颜色为color的圆点。 如果未指定size,则直径取pensize+4和2*pensize中的较大值, 示例代码如下。 >>> turtle.dot() #绘制默认大小的点。 >>> turtle.dot(100) #绘制直径为100的点 >>> turtle.dot(50,'red') #绘制直径为50的点,颜色为红色 13.turtle.stamp() 在画笔当前位置印制一个印章(画笔形状),返回该印章的stamp_id,示例代码如下。 >>> turtle.stamp() 19 14.turtle.clearstamp(stampid) 删除stampid指定的印章,stampid是调用stamp()的返回值,示例代码如下。 >>> turtle.clearstamp(19) 15.turtle.clearstamps(n=None) 参数n为整数或None。n为None则删除全部印章, n>0则删除前n个印章,n<0则删除后n个印章,示例代码如下。 >>> turtle.clearstamps(5) 16.turtle.undo() 撤消最近的一个画笔动作,可撤消的次数由撤消缓冲区的大小决定,示例代码如下。 >>> turtle.undo() 17.turtle.speed(speed=None) 设置画笔的移动速度。 不指定参数(或为None)时返回画笔的移动速度。 参数speed为0~10范围内的整数或速度字符串,除0以外的速度值越大绘图速度越快(0表示没有动画效果)。 可用的速度字符串与速度值的对应关系如下。 fastest:0,最快。 fast:10,快。 normal:6,正常。 slow:3,慢。 slowest:1,最慢。 示例代码如下。 >>> turtle.speed() 3 >>> turtle.speed('fast') >>> turtle.speed() 10 >>> turtle.speed(6) 18.turtle.position()和turtle.pos() 返回画笔当前的坐标,示例代码如下。 >>> turtle.pos() (100.00,100.00) 19.turtle.xcor() 返回画笔的x坐标。 20.turtle.ycor() 返回画笔的y坐标。 21.turtle.heading() 返回画笔的当前朝向。 22.turtle.distance(x, y=None) 返回从画笔位置到坐标(x,y)或另一画笔对应位置的距离。 参数x为画笔对象时,y为None 示例代码如下。 >>> turtle.home() >>> turtle.goto(100,100) >>> turtle.distance(0,0) 141.4213562373095 8.1.4 形状函数 1.turtle.getshapes() 返回画笔形状列表,列表包含当前可用的所有画笔形状的名称,示例代码如下。 >>> turtle.getshapes() ['arrow', 'blank', 'circle', 'classic', 'square', 'triangle', 'turtle'] 2.turtle.shape(name=None) 将画笔形状设置为name指定的形状,如未提供参数则返回当前的画笔形状的名称,示例代码如下。 >>> turtle.shape('turtle') #将画笔设置为海龟形状 3.turtle.begin_poly() 开始记录多边形的顶点,当前画笔位置为多边形的第一个顶点。 4.turtle.end_poly() 停止记录多边形的顶点,当前画笔位置为多边形的最后一个顶点,它将连线到第一个顶点。 5.turtle.get_poly() 返回最新记录的多边形,示例代码如下。 >>> turtle.begin_poly() #开始记录 >>> turtle.fd(50) >>> turtle.lt(60) >>> turtle.fd(50) >>> turtle.lt(60) >>> turtle.fd(50) >>> turtle.lt(60) >>> turtle.fd(50) >>> turtle.lt(60) >>> turtle.fd(50) >>> turtle.end_poly() #结束记录正六边形 >>> p=turtle.get_poly() #返回刚记录的多边形 >>> p ((0.00,0.00), (50.00,0.00), (75.00,43.30), (50.00,86.60), (0.00,86.60), (-25.00,43.30)) 记录的多边形为顶点坐标的元组。 6.turtle.register_shape(name,shape=None)和 turtle.addshape(name, shape=None) 为画笔注册新的形状。调用此函数有3种不同方式。 (1)参数name为形状的注册名称,shape为Shape对象。 示例代码如下。 >>> turtle.register_shape('sixpoly',p) #将多边形注册为画笔形状 >>> turtle.shape('sixpoly') #使用多边形作为画笔形状 (2)参数name为一个GIF文件的文件名,参数shape为None或者省略,GIF文件应放在当前工作目录中。参数name中不能包含路径。 示例代码如下。 >>> turtle.register_shape("star.gif") >>> turtle.getshapes() ['arrow', 'blank', 'circle', 'classic', 'square', 'star.gif', 'triangle', 'turtle'] >>> turtle.shape('star.gif') #使用已注册的gif文件图片作为画笔形状 (3)参数name为形状的注册名称字符串,shape为形状的顶点坐标元组 示例代码如下。 >>> turtle.register_shape("myTri",((0,-5),(5,0),(0,5))) >>> turtle.getshapes() ['arrow', 'blank', 'circle', 'classic', 'myTri', 'square', 'star.gif', 'triangle', 'turtle'] 7.使用复合形状 复合形状由多个不同颜色的多边形构成。 使用复合形状包含下列步骤。 创建一个类型为“compound”的Shape对象。 调用addcomponent()方法为Shape对象添加多边形。 注册Shape对象,并将其设置为画笔形状。 示例代码如下。 >>> s = turtle.Shape("compound") #创建空的复合形状对象 >>> p = ((0,0),(50,0),(50,50),(0,50)) #定义多边形顶点 >>> s.addcomponent(p, "red", "blue") #将多边形添加到复合形状对象 >>> p = ((10,10),(40,10),(40,40),(10,40)) >>> s.addcomponent(p, "blue", "red") >>> p = ((20,20),(30,20),(30,30),(20,30)) >>> s.addcomponent(p, "red", "blue") >>> turtle.register_shape("mycs", s) #注册复合形状对象 >>> turtle.shape('mycs') #将复合形状设置为画笔形状 8.1.5 输入输出函数 1.turtle.write(arg, move=False, align="left", font=("Arial", 8, "normal")) 将对象arg输出到画笔位置。 参数move为True时(默认为False),画笔会移动到文本的右下角。 参数align指定文本对齐方式,可取值“left”“center”或“right”,对齐位置为画笔当前位置。 参数font是一个三元组(fontname, fontsize, fonttype),用于指定字体名称、字号和字体类型。参数font默认为("Arial", 8, "normal"), 示例代码如下。 >>> turtle.home() >>> turtle.write((0.0)) >>> turtle.write("Python", True, align="center") 2.turtle.textinput(title, prompt) 用对话框输入字符串。参数title为对话框的标题,prompt为提示信息。 函数返回输入的字符串,取消对话框时返回None, 示例代码如下。 >>> turtle.textinput("Turtle绘图", "请输入一个字符串") 'Python编程' 3.turtle.numinput(title, prompt, default=None, minval=None, maxval=None) 用对话框输入数值。 参数title为对话框标题,prompt为提示信息,default为输入框初始值,minval为允许输入的最小值,maxval为允许输入的最大值。 函数返回输入的数值,取消对话框时返回None。 示例代码如下。 >>> turtle.numinput("Turtle绘图", "请输入一个数值",None,1,10) 8.1.6 事件处理相关函数 1.turtle.mainloop()和turtle.done() 开始事件循环,调用Tkinter库的mainloop()函数,用于实现turtle绘图窗口的交互功能。 应将turtle.mainloop()或turtle.done()作为一个绘图程序的结束语句,否则其后的绘图语句不会执行 示例代码如下。 >>> turtle.done() 2.turtle.listen() 使绘图窗口获得焦点,以便接收键盘和鼠标事件。 3.turtle.onkey(fun, key)和turtle.onkeyrelease(fun, key) 注册按键事件函数,fun为函数名,在按下并释放key指定的键时调用fun()函数。 fun为None时删除事件绑定。 参数key为键字符串,例如“a”或“space” 示例代码如下。 >>> def fun(): ... turtle.circle(50) ... >>> turtle.onkey(fun,'a’) #注册事件函数,在释放字母a键时,调用fun()函数 >>> turtle.listen() 4.turtle.onkeypress(fun, key=None) 与turtle.onkey(fun, key)和turtle.onkeyrelease(fun, key)类似,注册按键事件函数,fun为函数名,在按下(未释放)key指定的键时调用fun()函数。 >>> def fun(): ... turtle.fd(50) ... turtle.circle(45) ... >>> turtle.onkeypress(fun,'b') #在按下键盘上的字母b键时,调用fun()函数 >>> turtle.listen() 注意,在onkey、onkeyrelease和onkeypress等事件发生后,Python执行绑定的函数。 在函数执行过程中,如果发生其他事件,则会中断正在执行的函数,转去执行其他事件的绑定函数。 5.turtle.onclick(fun, btn=1, add=None)和 turtle.onscreenclick(fun, btn=1, add=None) 将函数fun()绑定到鼠标单击事件,fun为None时删除现有的绑定。 参数fun为函数名,调用时将传入两个参数表示鼠标所在点的坐标。 参数btn为1(默认值)时,表示鼠标左键,2表示鼠标中间键,3表示鼠标右键。 参数add为True时将添加一个新绑定,否则将取代先前的绑定。onclick()为画笔绑定鼠标单击事件函数 onscreenclick()为绘图窗口绑定鼠标单击事件函数。 示例代码如下。 >>> def fun(x,y): ... turtle.goto(x,y) ... turtle.circle(45) ... >>> turtle.onscreenclick(fun) #单击绘图窗口时调用函数fun() >>> turtle.onclick(fun,3) #右键单击画笔时调用函数fun() 6.turtle.onrelease(fun, btn=1, add=None) 将函数fun()绑定到鼠标释放事件,与turtle.onclick()类似, 示例代码如下。 >>> def fun(x,y): ... turtle.circle(50) ... >>> turtle.onrelease(fun,3) #在画笔上按下并释放鼠标右键时调用函数fun() 7.turtle.ondrag(fun, btn=1, add=None) 将fun()函数绑定到画笔的拖动事件。 如果fun值为None,则移除现有的绑定。 在拖动画笔时,首先会触发画笔的鼠标单击事件 示例代码如下。 >>> turtle.ondrag(turtle.goto) #拖动画笔在绘图窗口中手绘线条 8.turtle.ontimer(fun, t=0) 创建一个计时器,在t毫秒后调用fun()函数。 fun是函数名称,函数无参数 示例代码如下。 >>> def f(): ... turtle.fd(100) ... turtle.circle(50) ... >>> turtle.ontimer(f) #立即执行f()函数 >>> turtle.ontimer(f,2000) #2秒后执行f()函数 $$

资源预览图

任务8-1:绘制五角星(课件)-《程序设计基础(Python)》同步教学(人民邮电版)
1
任务8-1:绘制五角星(课件)-《程序设计基础(Python)》同步教学(人民邮电版)
2
任务8-1:绘制五角星(课件)-《程序设计基础(Python)》同步教学(人民邮电版)
3
任务8-1:绘制五角星(课件)-《程序设计基础(Python)》同步教学(人民邮电版)
4
任务8-1:绘制五角星(课件)-《程序设计基础(Python)》同步教学(人民邮电版)
5
任务8-1:绘制五角星(课件)-《程序设计基础(Python)》同步教学(人民邮电版)
6
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。