Python 您所在的位置:网站首页 海龟绘图三角形 Python

Python

2024-06-26 20:35| 来源: 网络整理| 查看: 265

一、概述

在 Python 中,海龟绘图提供了一个实体“海龟”形象(带有画笔的小机器动物),假定它在地板上平铺的纸张上画线。

二、运行环境

本文运行环境:Windows11,Python3.11,Pycharm2023.1.4 使用之前,需要先导入 turtle 模块的所有对象:

from turtle import *

import turtle as t

建议使用第二种,如果你遇到了 No module named '_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则删除后n个印章。撤消undo()————撤消 (或连续撤消) 最近的一个 (或多个) 海龟动作。可撤消的次数由撤消缓冲区的大小决定。速度speed(speed=None)——speed一个0..10范围内的整型数或速度字符串。设置海龟移动的速度为0..10表示的整型数值。如未指定参数则返回当前速度。如果输入数值大于10或小于0.5则速度设为0。速度字符串与速度值的对应关系如下:"fastes":0—— 最快"fast":10——快"normal": 6—— 正常"slow":3——慢"slowest":1——最慢注意:speed = 0表示没有动画效果。forward/back将使海龟向前/向后跳跃,同样的left/right将使海龟立即改变朝向。 from turtle import * # 利用前进后退左右转画一个正方形 fd(100) # 前进100 rt(90) # 右转90度 bk(100) # 后退100 rt(90) # 右转90度 fd(100) # 前进100 lt(90) # 左转90度 fd(100) # 前进100 # 在正方形的左边画一个圆 teleport(-200, 200) # 将画笔移动至坐标点(-200,200)位置,不会画线。 circle(100) # 逆时针画一个半径100的圆 goto(-200, 0) # 将画笔移动至坐标(-200,0)位置,会画出一条线。 circle(-100, 360, 6) # 顺时针画一个六变形 teleport(-300, 0) # 画笔移动至六边形形心 dot(5, 'red') # 利用红色点画出六边形形心 st = stamp() # 设置一个印章 speed('slowest') # 将画笔速度调至最慢 home() # 画笔返回原点 clearstamp(st) # 删除设置的印章 done() # 完成后不关闭绘图窗口 3.1.2获取海龟的状态 作用方法名称简写参数详细描述获取位置position()pos()——返回海龟当前的坐标(x,y) (为Vec2D矢量类对象)。目标方向towards(x, y=None)——x一个数值或数值对/矢量,或一个海龟实例y一个数值——如果x是一个数值,否则为None返回从海龟位置到由 (x,y)、矢量或另一海龟所确定位置的连线的夹角。 此数值依赖于海龟的初始朝向,这又取决于"standard"/"world"或"logo"模式设置。x坐标xcor()————返回海龟的x坐标。y坐标ycor()————返回海龟的y坐标。朝向heading()————返回海龟当前的朝向 (数值依赖于海龟模式参见mode())。距离distance(x, y=None)——x一个数值或数值对/矢量,或一个海龟实例y一个数值——如果 x 是一个数值,否则为None返回从海龟位置到由(x,y),矢量或另一海龟对应位置的单位距离。 from turtle import * fd(100) pos = position() print(pos) # 结果:(100.00,0.00) to = towards(100, 100) print(to) # 结果:90.0 x = xcor() print(x) # 结果:100.0 y = ycor() print(y) # 结果:0.0 lt(90) heading = heading() print(heading) # 结果:90.0 s = distance(100, 100) print(s) # 结果:100.0 done() # 完成后不关闭绘图窗口 3.1.3设置与度量单位 作用方法名称参数详细描述角度degrees(fullcircle=360.0)fullcircle一个数值设置角度的度量单位,即设置一个圆周为多少 “度”。默认值为 360 度。弧度radians()——设置角度的度量单位为弧度。其值等于degrees(2*math.pi)。 3.2画笔控制 3.2.1绘图状态 作用方法名称简写参数详细描述画笔落下pendown()pd()down()——画笔落下 – 移动时将画线。画笔抬起penup()pu()up()——画笔抬起 – 移动时不画线。画笔粗细pensize(width=None)width(width=None)width一个正数值设置线条的粗细为width或返回该值。如果resizemode设为"auto"并且turtleshape为多边形,该多边形也以同样组细的线条绘制。如未指定参数,则返回当前的pensize。画笔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": 数值此字典可作为后续调用pen()时的参数,以恢复之前的画笔状态。另外还可将这些属性作为关键词参数提交。使用此方式可以用一条语句设置画笔的多个属性。画笔是否落下isdown()————如果画笔落下返回True,如果画笔抬起返回False。 from turtle import * goto(100, 0) penup() print(isdown()) # 结果:False goto(200, 0) pendown() print(isdown()) # 结果:True pensize(5) pen(pencolor='red', speed=1) # 设置画笔颜色为红色,速度为1。 goto(300, 0) done() # 结束不关闭绘制窗口 3.2.2颜色控制 作用方法名称参数详细描述颜色color(*args)允许多种输入格式。使用如下0至3个参数:color()返回以一对颜色描述字符串或元组表示的当前画笔颜色和填充颜色,两者可分别由 pencolor()和fillcolor()返回。color(colorstring), color((r,g,b)), color(r,g,b)输入格式与pencolor()相同,同时设置填充颜色和画笔颜色为指定的值。color(colorstring1, colorstring2), color((r1,g1,b1), (r2,g2,b2))相当于pencolor(colorstring1)加fillcolor(colorstring2),使用其他输入格式的方法也与之类似。返回或设置画笔颜色和填充颜色。如果turtleshape为多边形,该多边形轮廓与填充也使用新设置的颜色。画笔颜色pencolor()允许以下四种输入格式::(1)pencolor()返回以颜色描述字符串或元组 (见示例) 表示的当前画笔颜色。可用作其他color/pencolor/fillcolor调用的输入。(2)pencolor(colorstring)设置画笔颜色为colorstring定的Tk颜色描述字符串,例如"red"、"yellow"或"#33cc8c"。(3)pencolor((r, g, b))设置画笔颜色为以r, g, b元组表示的RGB颜色。r, g, b的取值范围应为0..colormode,colormode的值为1.0或255 (参见colormode())。(4)pencolor(r, g, b)设置画笔颜色为以r, g, b表示的RGB颜色。r, g, b的取值范围应为0..colormode。返回或设置画笔颜色。如果 turtleshape为多边形,该多边形轮廓也以新设置的画笔颜色绘制。填充颜色fillcolor()允许以下四种输入格式:(1)fillcolor()返回以颜色描述字符串或元组 (见示例) 表示的当前填充颜色。可用作其他color/pencolor/fillcolor 调用的输入。(2)fillcolor(colorstring)设置填充颜色为colorstring指定的Tk颜色描述字符串,例如"red"、"yellow"或"#33cc8c"。(3)fillcolor((r, g, b))设置填充颜色为以 r, g, b元组表示的RGB颜色。r, g, b 的取值范围应为0..colormode,colormode 的值为1.0或255(参见colormode())。(4)fillcolor(r, g, b)设置填充颜色为r, g, b表示的RGB颜色。r, g, b的取值范围应为0..colormode。返回或设置填充颜色。如果turtleshape为多边形,该多边形内部也以新设置的填充颜色填充。 3.2.3填充 作用方法名称详细描述是否填充filling()返回填充状态 (填充为True,否则为False)。开始填充begin_fill()在绘制要填充的形状之前调用。结束填充end_fill()填充上次调用begin_fill()之后绘制的形状。 from turtle import * color('red', 'blue') # 设置画笔颜色:红色,填充颜色:蓝色 begin_fill() # 开始填充 circle(100) end_fill() # 结束填充 teleport(200, 0) # 移动画笔至(200,0)位置 pencolor('green') # 设置画笔颜色:绿色 fillcolor('yellow') # 设置填充颜色:黄色 begin_fill() circle(100, 360, 5) # 画一个正五边形 end_fill() done() # 绘制结束不关闭绘图窗口 3.2.4更多绘图控制 作用方法名称参数详细描述重置reset()——从屏幕中删除海龟的绘图,海龟回到原点并设置所有变量为默认值。清空clear()——从屏幕中删除指定海龟的绘图。不移动海龟。海龟的状态和位置以及其他海龟的绘图不受影响。书写write(arg, move=False, align='left', font=('Arial', 8, 'normal'))arg要书写到TurtleScreen的对象move ——True/Falsealign——字符串"left", "center"或"right"。font——一个三元组 (fontname, fontsize, fonttype)。基于align ("left", "center" 或 "right")并使用给定的字体将文本 ——arg的字符串表示形式 —— 写到当前海龟位置。 如果move为真值,画笔会移至文本的右下角。 默认情况下move为False。 from turtle import * # 利用循环绘制一个正方形 pencolor('green') for s in range(4): fd(100) lt(90) teleport(200, 200) circle(100) reset() # 删除绘图并重置画笔 # 利用循环绘制一个五角星 goto(200, 0) pencolor('red') write('五角星', True, "center", ('Arial', 8, 'normal')) # 设置书写字体内容,位置,类型,大小,风格 for m in range(5): fd(100) rt(144) clear() # 清空不重置画笔 home() # 可以看到画笔颜色没有改变 done() 3.3海龟状态 3.3.1可见性 作用方法名称简写详细描述显示海龟showturtle()st()使海龟可见。隐藏海龟hideturtle()ht()使海龟不可见。当你绘制复杂图形时这是个好主意,因为隐藏海龟可显著加快绘制速度。是否可见isvisible()——如果海龟显示返回True,如果海龟隐藏返回False。 3.3.2外观 作用方法名称参数详细描述形状shape(name=None)name 一个有效的形状名字符串。设置海龟形状为name指定的形状名,如未指定形状名则返回当前的形状名。ame指定的形状名应存在于TurtleScreen的shape字典中。多边形的形状初始时有以下几种:"arrow","turtle", "circle","square","triangle","classic"。要了解如何处理形状请参看Screen方法register_shape()。大小调整模式resizemode(rmode=None)rmode字符串"auto","user","noresize"其中之一。设置大小调整模式为以下值之一:"auto","user","noresize"。如未指定rmode则返回当前的大小调整模式。不同的大小调整模式的效果如下:"auto": 根据画笔粗细值调整海龟的外观。"user":根据拉伸因子和轮廓宽度(outline)值调整海龟的外观,两者是由 shapesize()设置的。"noresize":不调整海龟的外观大小。resizemode("user") 会由shapesize()带参数使用时被调用。形状大小shapesize(stretch_wid=None, stretch_len=None, outline=None)turtlesize(stretch_wid=None, stretch_len=None, outline=None)stretch_wid正数值stretch_len正数值outline正数值返回或设置画笔的属性x/y拉伸因子和/或轮廓。 设置大小调整模式为"user"。 当且仅当大小调整模式为"user"时,海龟会基于其拉伸因子调整外观:stretch_wid为垂直于其朝向的宽度拉伸因子,stretch_len为平行于其朝向的长度拉伸因子,outline决定形状轮廓线的宽度。剪切因子shearfactor(shear=None)shear数值 (可选)设置或返回当前的剪切因子。根据 share指定的剪切因子即剪切角度的切线来剪切海龟形状。不改变海龟的朝向 (移动方向)。如未指定shear参数:返回当前的剪切因子即剪切角度的切线,与海龟朝向平行的线条将被剪切。设置倾角settiltangle(angle)angle一个数值旋转海龟形状使其指向angle指定的方向,忽略其当前的倾角,不改变海龟的朝向 (移动方向)。3.1 版后已移除.倾角tiltangle(angle=None)angle一个数值 (可选)设置或返回当前的倾角。如果指定angle则旋转海龟形状使其指向angle指定的方向,忽略其当前的倾角。不改变海龟的朝向 (移动方向)。如果未指定angle:返回当前的倾角,即海龟形状的方向和海龟朝向 (移动方向) 之间的夹角。倾斜tilt(angle)angle一个数值海龟形状自其当前的倾角转动angle指定的角度,但不改变海龟的朝向 (移动方向)。变形shapetransform(t11=None, t12=None, t21=None, t22=None)t11一个数值 (可选)t12一个数值 (可选)t21一个数值 (可选)t12一个数值 (可选)设置或返回海龟形状的当前变形矩阵。如未指定任何矩阵元素,则返回以4元素元组表示的变形矩阵。 否则就根据设置指定元素的矩阵来改变海龟形状,矩阵第一排的值为t11,t12而第二排的值为t21,t22。行列式t11 * t22 - t12 * t21必须不为零,否则会引发错误。根据指定矩阵修改拉伸因子stretchfactor,剪切因子shearfactor和倾角tiltangle。获取形状多边形get_shapepoly()——返回以坐标值对元组表示的当前形状多边形。这可以用于定义一个新形状或一个复合形状的多个组成部分。 from turtle import * hideturtle() # 隐藏海龟 stamp() # 留下一个印章方便比对,隐藏后印章一样可以留下 shape('arrow') # 改变海龟形状 fd(100) stamp() shape('turtle') fd(50) stamp() shape('circle') fd(50) stamp() shape('square') rt(90) fd(50) stamp() shape("triangle") rt(90) fd(50) stamp() shape("classic") fd(50) print(isvisible()) # 海龟是否可见 结果:False showturtle() # 使海龟可见 print(isvisible()) # 海龟是否可见 结果:False done() # 上述自行尝试 3.4使用事件 作用方法名称参数详细描述当鼠标点击onclick(fun, btn=1, add=None)fun一个函数,调用时将传入两个参数表示在画布上点击的坐标。btn鼠标按钮编号,默认值为 1 (鼠标左键)。add——True或False,如为True则将添加一个新绑定,否则将取代先前的绑定。将 fun指定的函数绑定到在此海龟上释放鼠标按键事件。如果fun值为None,则移除现有的绑定。当鼠标释放onrelease(fun, btn=1, add=None)fun一个函数,调用时将传入两个参数表示在画布上点击的坐标。btn鼠标按钮编号,默认值为 1 (鼠标左键)。add——True或False,如为True则将添加一个新绑定,否则将取代先前的绑定。将 fun指定的函数绑定到在此海龟上释放鼠标按键事件。如果fun值为None,则移除现有的绑定。当鼠标拖动ondrag(fun, btn=1, add=None)fun一个函数,调用时将传入两个参数表示在画布上点击的坐标。btn鼠标按钮编号,默认值为 1 (鼠标左键)。add——True或False,如为True则将添加一个新绑定,否则将取代先前的绑定。将 fun指定的函数绑定到在此海龟上释放鼠标按键事件。如果fun值为None,则移除现有的绑定。

注: 在海龟上移动鼠标事件之前应先发生在此海龟上点击鼠标事件。在此之后点击并拖动海龟可在屏幕上手绘线条 (如果画笔为落下)。

import turtle as t # 函数1 画一个正方形 def fun1(x, y): for i in range(4): t.fd(100) t.lt(90) # 函数2 画一个红色五角星 def fun2(x, y): t.pencolor('red') for i in range(5): t.fd(100) t.rt(144) # 先改变下形状,方便点击,三个事件要去点击海龟对象,点击屏幕没有反应,而且要一个一个执行,看后面解释。 t.shape("turtle") t.onclick(fun1) # 鼠标点击事件,点击执行fun1,点击事件执行的函数必须包含两个假的参数,不然会报错。 # t.onrelease(fun2) # 鼠标释放事件,点击释放后执行fun2 # t.ondrag(fun2) # 鼠标拖动,拖动后执行fun2,这个结果也会出乎你的意料,尝试下看看 t.done()

说明:以上三个事件,开始我以为点击绘图窗口屏幕就可以执行,但事实并非如此,你会发现点击绘图窗口没有反应,需要点击海龟画笔才会执行相应事件。原因:这三个函数是Turtle的函数,对象为Turtle,我们点击绘图窗口,对象为Screen窗口对象,而我们函数调用的是Turtle对象的函数,所以点击绘图窗口不会执行,需要点击海龟画笔。这是我个人的理解,大家可以评论区讨论下。至于为什么要一个一个执行,你可以尝试下同时执行三个函数,看下结果,可能会出乎你的意料,原因不再解释,思考下Python的执行原理,就能理解,大家评论区可讨论下,留下自己的看法。如果想实现点击绘图屏幕执行点击事件,请往后面看4.2使用屏幕事件。

3.5特殊海龟方法 作用方法名称详细描述开始记录多边形begin_poly()开始记录多边形的顶点。当前海龟位置为多边形的第一个顶点。结束记录多边形end_poly()停止记录多边形的顶点。当前海龟位置为多边形的最后一个顶点。它将连线到第一个顶点。获取多边形get_poly()返回最新记录的多边形。克隆clone()创建并返回海龟的克隆体,具有相同的位置、朝向和海龟属性。获取海龟画笔getturtle()getpen()返回海龟对象自身。唯一合理的用法:作为一个函数来返回 “匿名海龟”。获取屏幕getscreen()返回作为海龟绘图场所的TurtleScreen类对象。该对象将可调用TurtleScreen方法。设置撤消缓冲区setundobuffer(size)size一个整型数值或None。设置或禁用撤销缓冲区。 如果size为整数,则开辟一个给定大小的空撤销缓冲区。size给出了可以通过undo()方法/函数撤销海龟动作的最大次数。 如果size为None,则禁用撤销缓冲区。撤消缓冲区条目数undobufferentries()返回撤销缓冲区里的条目数。 import turtle as t t.begin_poly() # 开始记录多边形的顶点 for i in range(6): t.fd(100) t.rt(60) t.end_poly() # 停止记录多边形的顶点 print(t.get_poly()) # 结果为多边形顶点坐标:((0.00,0.00), (100.00,0.00), (150.00,-86.60), (100.00,-173.21), (0.00,-173.21), (-50.00,-86.60), (-0.00,-0.00)) s = t.clone() #克隆一个海龟 s.pencolor('red') s.teleport(200, 200) t.teleport(-200, 200) s.begin_poly() for i in range(5): s.fd(100) s.rt(144) s.end_poly() print(s.get_poly()) # 结果:((200.00,200.00), (300.00,200.00), (219.10,141.22), (250.00,236.33), (280.90,141.22), (200.00,200.00)) print(t.getturtle()) print(s.getturtle()) # 可以看到输出两个地址是不一样的 # getscreen()函数后面介绍,设置缓冲去自行尝试。 t.done() 3.6复合形状

要使用由多个不同颜色多边形构成的复合海龟形状,你必须明确地使用辅助类Shape,具体步骤如下: 1、创建一个空Shape对象,类型为"compound"。 2、可根据需要使用addcomponent()方法向此对象添加多个组件。 3、接下来将Shape对象添加到Screen对象的形状列表并使用它。

方法名称参数addcomponent(poly, fill, outline=None)poly一个多边形,即由数值对构成的元组fill一种颜色,将用来填充poly指定的多边形outline一种颜色,用于多边形的轮廓 (如有指定)。

备注:Shape类在register_shape()方法的内部以多种方式使用。应用程序编写者只有在使用上述的复合形状时才需要处理Shape类。

import turtle as t s = t.Shape("compound") # 创建Shape类对象,类型为"compound" poly1 = ((0, 0), (10, -5), (0, 10), (-10, -5)) # 复合图形1的顶点坐标 s.addcomponent(poly1, "red", "blue") # 将复合图形1添加到Shape对象 poly2 = ((0, 0), (10, -5), (-10, -5)) # 复合图形2的顶点坐标 s.addcomponent(poly2, "blue", "red") # 将复合图形1添加到Shape对象 t.register_shape("myshape", s) # 将复合图形添加至TurtleScreen的形状列表 t.shape("myshape") # 选用添加的复合图形 t.stamp() # 设置一个印章检查是否添加成功 t.done() 四、TurtleScreen/Screen 方法

TurtleScreen是基本的海龟绘图区域。Screen是TurtleScreen的子类,并包括一些额外方法用来管理其外观(包括大小和标题)及行为。

4.1窗口控制 作用方法名称参数详细描述背景颜色bgcolor(*args)args一个颜色字符串或三个取值范围0..colormode内的数值或一个取值范围相同的数值3元组。设置或返回TurtleScreen的背景颜色。背景图片bgpic(picname=None)picname一个字符串, gif-文件名, "nopic", 或None。设置背景图片或返回当前背景图片名称。如果picname为一个文件名,则将相应图片设为背景。如果picname为"nopic",则删除当前背景图片。如果picname为 None,则返回当前背景图片文件名。重置clearscreen()——从中删除所有海龟的全部绘图。将已清空的TurtleScreen重置为初始状态: 白色背景,无背景片,无事件绑定并启用追踪。重置resetscreen()——重置屏幕上的所有海龟为其初始状态。屏幕大小screensize(canvwidth=None, canvheight=None, bg=None)canvwidth正整型数,以像素表示画布的新宽度值。canvheight正整型数,以像素表示画面的新高度值。bg颜色字符串或颜色元组,新的背景颜色。如未指定任何参数,则返回当前的 (canvaswidth, canvasheight)。否则改变作为海龟绘图场所的画布大小。不改变绘图窗口。要观察画布的隐藏区域,可以使用滚动条。通过此方法可以令之前绘制于画布之外的图形变为可见。也可以用来寻找意外逃走的海龟。设置世界坐标系setworldcoordinates(llx, lly, urx, ury)llx一个数值, 画布左下角的x坐标。lly一个数值, 画布左下角的y坐标。urx一个数值, 画面右上角的x坐标。ury一个数值, 画布右上角的y坐标。设置用户自定义坐标系并在必要时切换模式为"world"。这会执行一次screen.reset()。如果"world"模式已激活,则所有图形将根据新的坐标系重绘。注意: 在用户自定义坐标系中,角度可能显得扭曲。 import turtle as t t.bgcolor('yellow') # 设置窗口背景为黄色 t.bgpic('R-C.gif') # 设置背景图片,注意图片类型为gif,图片与Python文件同目录,或者为图片绝对路径 # t.clearscreen() # 清空屏幕 # t.resetscreen() # 重置屏幕海龟为其初始状态。 t.screensize(1000, 1000, 'red') # 设置画布大小及背景颜色 t.done()

说明:screensize()只能设置画布大小,不能改变窗口的大小,想要改变窗口大小,请看后面4.5 Screen专有方法setup()。

4.2动画控制 作用方法名称参数详细描述延迟delay(delay=None)delay正整型数设置或返回以毫秒数表示的延迟值delay。(这约等于连续两次画布刷新的间隔时间。) 绘图延迟越长,动画速度越慢。追踪tracer(n=None, delay=None)n非负整型数。delay非负整型数。启用/禁用海龟动画并设置刷新图形的延迟时间。如果指定 n值,则只有每第n次屏幕刷新会实际执行。(可被用来加速复杂图形的绘制。) 如果调用时不带参数,则返回当前保存的n值。第二个参数设置延迟值 (参见delay())。更新update()——执行一次TurtleScreen刷新。在禁用追踪时使用。

delay()延迟:

import turtle as t # 绘制一个五角星 def fun(): for i in range(5): t.fd(100) t.rt(144) print(t.delay()) # 输出当前画布刷新时间间隔(延迟值),结果:10 t.delay(200) # 可以看到绘制速度变慢了 # t.speed(1) # 使用speed()函数同样能使速度变慢,但两者是有不同的,可以仔细观察下。 fun() t.done()

tracer()追踪:

import turtle as t print(t.tracer()) # 输出当前的n值,结果:1 t.tracer(0) # 禁用海龟动画,可以尝试将n设置成不同的值,不执行刷新看下结果,tracer(0)等同于tracer(False),tracer(1)等同于tracer(True) for i in range(5): t.fd(100) t.rt(144) # t.update() # 禁用动画后,不执行刷新,不显示绘图的完整结果,也可以通过启用,显示完整绘图结果。 t.done() # 可以用来制作动画效果,可以看后面实例 4.2使用屏幕事件 作用方法名称参数详细描述监听listen(xdummy=None, ydummy=None)——设置焦点到TurtleScreen(以便接收按键事件)。使用两个Dummy参数以便能够传递 listen()给onclick方法。当键盘按下并释放onkey(fun, key)onkeyrelease(fun, key)fun一个无参数的函数或None。key一个字符串:键 (例如 "a") 或键标 (例如"space")绑定fun指定的函数到按键释放事件。如果fun值为None,则移除事件绑定。注:为了能够注册按键事件,TurtleScreen必须得到焦点。(参见listen()方法。)当键盘按下onkeypress(fun, key=None)fun一个无参数的函数或None。key一个字符串:键 (例如 "a") 或键标 (例如"space")绑定fun指定的函数到指定键的按下事件。如未指定键则绑定到任意键的按下事件。注: 为了能够注册按键事件,必须得到焦点。(参见listen()方法。)当点击屏幕onclick(fun, btn=1, add=None)onscreenclick(fun, btn=1, add=None)fun一个函数,调用时将传入两个参数表示在画布上点击的坐标。btn鼠标按钮编号,默认值为1(鼠标左键)add——True或False,如为True则将添加一个新绑定,否则将取代先前的绑定。绑定fun指定的函数到鼠标点击屏幕事件。如果fun值为None,则移除现有的绑定。备注:此TurtleScreen方法作为全局函数时只有一个名字onscreenclick。全局函数onclick所对应的是Turtle方法onclick。当达到定时ontimer(fun, t=0)fun一个无参数的函数。t 一个 >= 0的数值。安装一个计时器,在t毫秒后调用fun函数。主循环mainloop()done()——开始事件循环,调用Tkinter的mainloop函数。必须作为一个海龟绘图程序的结束语句。如果一个脚本是在以n模式 (无子进程) 启动的IDLE中运行时,不可使用,用于实现海龟绘图的交互功能。 import turtle as t def fun1(): for i in range(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()

接下来看下屏幕点击事件: 首先介绍onscreenclick():

import turtle as t def fun1(x, y): for i in range(5): t.fd(100) t.rt(144) t.onscreenclick(fun1) # 点击窗口空白地方,海归会执行fun1,在海龟当前绘制图形,注意:执行的函数需要设置两个假的参数,不然会报错。 t.done() # 可以通过调用goto()函数实现:鼠标点哪里,海龟移动到哪里,可以看下边实例。

再看一下onclick()这个函数:

import turtle as t s = t.getscreen() # 获取窗口TurtleScreen对象 s.onclick(t.goto) # 通过窗口类对象调用onclick()函数,执行goto(),实现在绘图窗口点哪里海龟移动到哪里。 t.done()

前面我们已经对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()——返回海龟窗口的宽度。 import turtle as t print(t.mode()) # 输出当前海龟模式,结果:standard t.mode('logo') # 设置海龟模式logo t.fd(100) print(t.colormode()) # 输出当前颜色模式,结果:1.0 print(t.getshapes()) # 输出当前可用海龟形状,结果:['arrow', 'blank', 'circle', 'classic', 'square', 'triangle', 'turtle'] print(t.turtles()) # 返回屏幕上的海龟列表 print(t.window_width()) # 返回海龟窗口的宽度。 print(t.window_height()) # 返回海龟窗口的高度。 # 画一个五角星作为一个新的海龟形状 t.begin_poly() # 开始记录五角星顶点坐标 for i in range(5): t.fd(50) t.rt(144) t.end_poly() # 结束记录五角星顶点坐标 t.addshape("star", t.get_poly()) # 将五角星添加为海龟形状 t.shape('star') # 将海龟形状设置为刚添加的五角星 t.fd(100) t.done() 4.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。

文本输入示例:

import turtle as t # 实现交互,输入五边形绘制一个五边形,你可以尝试更复杂的例子。 s = t.textinput("绘制五边形:","请输入‘五边形’:") if s == '五边形': t.circle(100,360,5) else: t.write("你输入有误") t.done()

数字输入示例:

import turtle as t # 根据输入的数字绘制多边形 s = t.numinput("绘制多边形:", "请输入你想绘制的多边形:", 3, 3,10) a = int(s) if 3


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有