找回密码
 会员注册
查看: 40|回复: 0

Python——turtle库(海龟绘图)介绍与使用

[复制链接]

5

主题

0

回帖

16

积分

新手上路

积分
16
发表于 2024-9-5 18:38:17 | 显示全部楼层 |阅读模式
一、概述在Python中,海龟绘图提供了一个实体“海龟”形象(带有画笔的小机器动物),假定它在地板上平铺的纸张上画线。二、运行环境本文运行环境:Windows11,Python3.11,Pycharm2023.1.4使用之前,需要先导入turtle模块的所有对象:fromturtleimport*1'运行运行或importturtleast1'运行运行建议使用第二种,如果你遇到了Nomodulenamed'_tkinter'错误,则需要在你的系统中安装Tk接口包。三、RawTurtle/Turtle方法和对应函数Turtle是RawTurtle的子类。3.1海龟动作3.1.1移动和绘制作用方法名称简写参数描述前进forward(distance)fd(distance)distance一个数值(整型或浮点型)海龟前进distance指定的距离,方向为海龟的朝向。后退backward(distance)bk(distance)back(distance)distance一个数值(整型或浮点型)海龟后退distance指定的距离,方向与海龟的朝向相反。不改变海龟的朝向。右转right(angle)rt(angle)angle一个数值(整型或浮点型)海龟右转angle个单位。(单位默认为角度,但可通过degrees()和radians()函数改变设置。)角度的正负由海龟模式确定,参见mode()。左转left(angle)lt(angle)angle一个数值(整型或浮点型)海龟左转angle个单位。(单位默认为角度,但可通过degrees()和radians()函数改变设置。)角度的正负由海龟模式确定,参见mode()。前往/定位goto(x,y=None)setpos(x,y=None)setposition(x,y=None)x一个数值或数值对/向量y一个数值或None如果y为None,x应为一个表示坐标的数值对或Vec2D类对象(例如pos()返回的对象)海龟移动到一个绝对坐标。如果画笔已落下将会画线。不改变海龟的朝向。前往/定位teleport(x,y=None,*,fill_gap=False)——x一个数值或Noney一个数值或Nonefill_gap布尔值将海龟移到某个绝对位置。不同于goto(x,y),这将不会画一条线段。海龟的方向不变。如果当前正在填充,离开后原位置上的多边形将被填充,在移位后将再次开始填充。这可以通过fill_gap=True来禁用,此设置将使在移位期间海龟的移动轨迹线像在goto(x,y)中一样被当作填充边缘。设置x坐标setx(x)——x一个数值(整型或浮点型)设置海龟的横坐标为x,纵坐标保持不变。设置y坐标sety(y)——y一个数值(整型或浮点型)设置海龟的纵坐标为y,横坐标保持不变。设置朝向setheading(to_angle)seth(to_angle)to_angle一个数值(整型或浮点型)设置海龟的朝向为to_angle。以下是以角度表示的几个常用方向:标准模式:0-东,90-北,180-西,270-南。logo模式:0-北,90-东,180-南,270-西。返回原点home()————海龟移至初始坐标(0,0),并设置朝向为初始方向(由海龟模式确定,参见mode())。画圆circle(radius,extent=None,steps=None)——radius一个数值extent一个数值(或None)steps一个整型数(或None)绘制一个radius指定半径的圆。圆心在海龟左边radius个单位;extent为一个夹角,用来决定绘制圆的一部分。如未指定extent则绘制整个圆。如果extent不是完整圆周,则以当前画笔位置为一个端点绘制圆弧。如果radius为正值则朝逆时针方向绘制圆弧,否则朝顺时针方向。最终海龟的朝向会依据extent的值而改变。圆实际是以其内切正多边形来近似表示的,其边的数量由steps指定。如果未指定边数则会自动确定。此方法也可用来绘制正多边形。画点dot(size=None,*color)——size一个整型数>=1(如果指定)color一个颜色字符串或颜色数值元组绘制一个直径为size,颜色为color的圆点。如果size未指定,则直径取pensize+4和2*pensize中的较大值。印章stamp()————在海龟当前位置印制一个海龟形状。返回该印章的stamp_id,印章可以通过调用clearstamp(stamp_id)来删除。清除印章clearstamp(stampid)——stampid一个整型数,必须是之前stamp()调用的返回值删除stampid指定的印章。清除多个印章clearstamps(n=None)——n一个整型数(或None)删除全部或前/后n个海龟印章。如果n为None则删除全部印章,如果n>0则删除前n个印章,否则如果n=0的数值。安装一个计时器,在t毫秒后调用fun函数。主循环mainloop()done()——开始事件循环,调用Tkinter的mainloop函数。必须作为一个海龟绘图程序的结束语句。如果一个脚本是在以n模式(无子进程)启动的IDLE中运行时,不可使用,用于实现海龟绘图的交互功能。importturtleastdeffun1():foriinrange(5):t.fd(100)t.rt(144)t.listen()#设置焦点到窗口,文档解释里有两个假参数,是为了方便在onclick()里面调用listen()。t.onkey(fun1,'a')#绑定fun指定的函数到按键释放事件t.onkeypress(fun1,'m')#绑定fun指定的函数到指定键的按下事件t.ontimer(fun1,1000)#安装一个计时器,在t毫秒后调用fun函数t.done()1234567891011121314接下来看下屏幕点击事件:首先介绍onscreenclick():importturtleastdeffun1(x,y):foriinrange(5):t.fd(100)t.rt(144)t.onscreenclick(fun1)#点击窗口空白地方,海归会执行fun1,在海龟当前绘制图形,注意:执行的函数需要设置两个假的参数,不然会报错。t.done()#可以通过调用goto()函数实现:鼠标点哪里,海龟移动到哪里,可以看下边实例。123456789101112再看一下onclick()这个函数:importturtleasts=t.getscreen()#获取窗口TurtleScreen对象s.onclick(t.goto)#通过窗口类对象调用onclick()函数,执行goto(),实现在绘图窗口点哪里海龟移动到哪里。t.done()12345前面我们已经对t.onclick()进行了测试,正如文档所述,直接使用onclik(),调用的是Turtle对象的onclick()函数,并非TurtleScreen对象的onclick()函数。TurtleScreen对象的onclick()函数不能作为全局函数使用。4.3设置与特殊方法作用方法名称参数详细描述设置海龟模式mode(mode=None)mode字符串"standard","logo"或"world"其中之一。设置海龟模式("standard","logo"或"world")并执行重置。如未指定模式则返回当前的模式。"standard"模式与旧的turtle兼容。"logo"模式与大部分Logo海龟绘图兼容。"world"模式使用用户自定义的"世界坐标系"。注意:在此模式下,如果x/y单位比率不等于1则角度会显得扭曲。模式——初始海龟朝向——正数角度"standard"——朝右(东)——逆时针"logo"——朝上(北)——顺时针颜色模式colormode(cmode=None)cmode数值1.0或255其中之一。返回colormode或将其设为1.0或255。后续表示三原色的r,g,b值必须在0..cmode范围之内。获取画布getcanvas()——返回此TurtleScreen的Canvas对象。供了解Tkinter的Canvas对象内部机理的人士使用。获取形状getshapes()——返回所有当前可用海龟形状的列表。添加形状register_shape(name,shape=None)addshape(name,shape=None)(1)name为一个gif文件的文件名,shape为None:安装相应的图像形状。(2)name为指定的字符串,shape为由坐标值对构成的元组:安装相应的多边形形状。(3)name为任意字符串而shape为(复合)Shape对象:安装相应的复合形状。将一个海龟形状加入TurtleScreen的形状列表。只有这样注册过的形状才能通过执行shape(shapename)命令来使用。所有海龟turtles()——返回屏幕上的海龟列表。窗口高度window_height()——返回海龟窗口的高度。窗口宽度window_width()——返回海龟窗口的宽度。importturtleastprint(t.mode())#输出当前海龟模式,结果:standardt.mode('logo')#设置海龟模式logot.fd(100)print(t.colormode())#输出当前颜色模式,结果:1.0print(t.getshapes())#输出当前可用海龟形状,结果:['arrow','blank','circle','classic','square','triangle','turtle']print(t.turtles())#返回屏幕上的海龟列表print(t.window_width())#返回海龟窗口的宽度。print(t.window_height())#返回海龟窗口的高度。#画一个五角星作为一个新的海龟形状t.begin_poly()#开始记录五角星顶点坐标foriinrange(5):t.fd(50)t.rt(144)t.end_poly()#结束记录五角星顶点坐标t.addshape("star",t.get_poly())#将五角星添加为海龟形状t.shape('star')#将海龟形状设置为刚添加的五角星t.fd(100)t.done()12345678910111213141516171819204.4输入方法作用方法名称参数详细描述文本输入textinput(title,prompt)title字符串。prompt字符串。弹出一个对话框窗口用来输入一个字符串。形参title为对话框窗口的,prompt为一条文本,通常用来提示要输入什么信息。返回输入的字符串。如果对话框被取消则返回None。数字输入numinput(title,prompt,default=None,minval=None,maxval=None)title字符串。prompt字符串。default数值(可选)。minval数值(可选)。maxval数值(可选)。弹出一个用于输入数值的对话框窗口。title是对话框窗口的,prompt是通常用来描述要输入的数字信息的文本。default:默认值,minval:可输入的最小值,maxval::可输入的最大值。如果给出minval..maxval则输入的数值必须在此范围以内。如未给出,则将发出提示并且让话框保持打开以便修正。返回输入的数值。如果对话框被取消,则返回None。文本输入示例:importturtleast#实现交互,输入五边形绘制一个五边形,你可以尝试更复杂的例子。s=t.textinput("绘制五边形:","请输入‘五边形’:")ifs=='五边形':t.circle(100,360,5)else:t.write("你输入有误")t.done()12345678数字输入示例:importturtleast#根据输入的数字绘制多边形s=t.numinput("绘制多边形:","请输入你想绘制的多边形:",3,3,10)a=int(s)if30else2#每次更改旋转角度ifcs
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-8 12:46 , Processed in 1.240830 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表