自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm=1001.2014.3001.5501
在窗口中,坐标原点(0,0)的位置默认有一个指向x轴正方向的箭头(或小乌龟),这就相当于我们的画笔。在海龟绘图中,通过画笔可以控制线条的粗细、颜色、运动的速度以及是否显示光标等样式。下面分别进行介绍。
画笔初始形状
在海龟绘图中,默认的画笔形状为箭头,可以通过shape()方法修改为其他样式。shape()方法的语
法如下:
turtle.shape(name=None)
其中,name参数为可选参数,用于指定形状名,如没有指定形状名,则返回当前的形状名。常用的形状名有arrow(向右的等腰三角形)、turtle(海龟)、circle(实心圆)、square(实心正方形)、triangle(向右的正三角形)或classic(箭头)等6种,如图15.10所示。
图15.10 画笔的6种形状
注意:画笔的样式设置后,如果不改变为其他状态,那么会一直有效。
例如,先获取当前的画笔形状,然后将画笔形状修改为实心圆,再获取画笔的形状,代码如下:
from turtle import * # 导入turtle的全部定义
print('修改前:',turtle.shape()) # 获取当前的画笔形状
turtle.shape(name = 'circle') # 设置当前的画笔形状为实心圆
print('修改后:',turtle.shape()) # 获取修改后的画笔形状
turtle.done() # 海龟绘图程序的结束语句(开始主循环)
运行程序,将显示如图15.11所示的效果。
图15.11 改变并获取画笔的形状
在海龟绘图中,一个画笔形状会跟随海龟的光标移动。如果想要在海龟移动过的某个位置留下一个海龟形状,可以使用stamp()方法在当前光标处印制一个印章,该印章不会跟随海龟光标移动。例如,想要在当前光标位置印制一枚印章,可以使用下面的代码:
t = turtle.Pen()
stampid = t.stamp()
设置画笔颜色
在海龟绘图中,画笔的默认颜色为黑色,可以使用pencolor()或者color()方法修改画笔的颜色。下面分别进行介绍。
v pencolor()方法:用于修改画笔的颜色,同时画笔形状会添加一圈所指定颜色的描述,但是内部还是默认的黑色。pencolor()方法的语法如下:
turtle.pencolor(*args)
args参数为可变参数,可以是一个颜色字符串(可以使用英文颜色或者十六进制颜色值,常用的颜色字符串如表15.1所示),也可以是三个取值范围在0~cmode之间的数值(如1.0,0.5,0.5,分别代表r,g,b 的值),还可以是一个取值范围相同的包括3个数值元素(取值范围在0~cmode)的元组(如(1.0,0.5,0.5),分别代表r,g,b的值)。
说明:关于颜色的具体取值请参见15.2.3 小节中的bgcolor() 方法。
例如,使用pencolor()方法设置画笔颜色为红色,并且让海龟向前移动100像素,可以使用下面的代码:
import turtle # 导入海龟绘图模块
turtle.pencolor('red')
turtle.forward(100)
turtle.done() # 海龟绘图程序的结束语句(开始主循环)
或者
import turtle # 导入海龟绘图模块
turtle.pencolor(1,0,0)
turtle.forward(100)
turtle.done() # 海龟绘图程序的结束语句(开始主循环)
再或者
import turtle # 导入海龟绘图模块
turtle.colormode(255) # 设置颜色模式
turtle.pencolor(255,0,0)
turtle.forward(100)
turtle.done() # 海龟绘图程序的结束语句(开始主循环)
运行上面3段代码中的任何一段,都将显示如图15.12所示的结果。
图15.12 使用pencolor()方法设置画笔的颜色
l color()方法:用于获取或修改画笔的颜色,整个画笔的形状均为所设置的颜色。color()方法的语法如下:
turtle.color(*args)
args参数值可以设置为与pencolor()方法的完全相同,这里将不再赘述。也可以设置两种颜色,分别用于指定轮廓颜色和填充颜色。例如,“turtle.color('red','yellow')”表示轮廓颜色为红色,填充颜色为黄色。
说明:关于填充的设置可以参见第15.4.5 小节。
例如,使用color()方法设置画笔颜色为红色,并且让海龟向前移动100像素,可以使用下面的代码:
import turtle # 导入海龟绘图模块
turtle.color('red')
turtle.forward(100)
turtle.done() # 海龟绘图程序的结束语句(开始主循环)
程序运行结果如图15.13所示。对比图15.12与图15.13可以看出pencolor()方法与color()方法的区别。
图15.13 使用color()方法设置画笔的颜色
落笔与抬笔
本小节我们先来画两条不同颜色的平行线。要实现该功能需要进行以下几步的操作:
设置画笔颜色 → 绘制第一条直线 → 向左旋转90度 → 移动一段距离 → 再向左旋转90度 → 设置画笔颜色 → 绘制第二条直线。
根据以上分析编写的代码如下:
import turtle # 导入海龟绘图模块
turtle.color('red')
turtle.forward(200) # 画一条红色的线
turtle.left(90)
turtle.forward(30) # 画一条红色的线
turtle.left(90)
turtle.color('green')
turtle.forward(200) # 画一条绿色的线
turtle.done() # 海龟绘图程序的结束语句(开始主循环)
运行上面的代码,将显示如图15.14所示的结果。
图15.14 绘制两条不同颜色的平行线(未完成)
从图15.14可以看出,并没实现想要的绘制两条平行线。这是因为在移动海龟时,默认会留下“足迹”。如果有时只想实现移动,而不想画线,那么需要设置画笔的抬起(简称抬笔)和落下(简称落笔)的状态。当抬笔时不画线,落笔时再画线。
l 实现抬笔功能时,可以使用下面3种方法:
Ø turtle.penup()
Ø turtle.pu()
Ø turtle.up()
说明:这三种方法的功能是一样的,使用哪种方法都可以。
l 实现落笔功能时,可以使用下面3种方法:
Ø turtle.pendown()
Ø turtle.pd()
Ø turtle.down()
说明:这三种方法的功能是一样的,使用哪种方法都可以。
实例15.2 绘制两条不同颜色的平行线
首先导入海龟绘图模块,并且画一条红线,然后逆时针旋转90度,并且设置抬笔,再移动30像素,并且逆时针旋转90度,最后设置落笔,并且画一条绿色的线,代码如下:
import turtle # 导入海龟绘图模块
turtle.color('red')
turtle.forward(200) # 画一条红色的线
turtle.left(90) # 逆时针旋转90度
turtle.penup() # 抬笔
turtle.forward(30) # 向上移动30像素
turtle.left(90)
turtle.pendown() # 落笔
turtle.color('green')
turtle.forward(200) # 画一条绿色的线
turtle.done() # 海龟绘图程序的结束语句(开始主循环)
运行程序,效果如图15.15所示。
图15.15 绘制两条不同颜色的平行线( 完成)
设置线条粗细
在海龟绘图中,默认的线条粗细为1像素。如果想改变线条粗细,可以通过以下两个方法中的任
意一个实现:
turtle.pensize(width=None)
或者
turtle.width(width=None)
其中,width为可选参数,如果不指定,则获取当前画笔的粗细,否则使用设置的值改变画笔的粗细。
例如,修改【实例15.2】,将第二条绿色的线的粗细设置为5像素。修改后的代码如下:
import turtle # 导入海龟绘图模块
turtle.color('red')
turtle.forward(200) # 画一条红色的线
turtle.left(90) # 逆时针旋转90度
turtle.penup() # 抬笔
turtle.forward(30) # 向上移动30像素
turtle.left(90)
turtle.pendown() # 落笔
turtle.width(5) # 设置线的粗细为5像素
turtle.color('green')
turtle.forward(200) # 画一条绿色的线
turtle.done() # 海龟绘图程序的结束语句(开始主循环)
说明:第09 行代码为在【实例15.2】的基础上新增加的代码。
修改后的程序运行效果如图15.16 所示。
图 15.16 修改线的粗细
从图15.16中可以看出,设置线的粗细后,海龟的光标还是原来的大小,如果想要改变其大小,可以在设置线的粗细之前使用代码“turtle.resizemode('auto')”设置改变模式为自动。修改后的代码运行效果如图15.17所示。
图1 5.17 改变海龟的光标大小
隐藏与显示海龟光标
在默认情况下采用海龟绘图时,会显示海龟光标。例如,已经通过shape()方法将当前的光标样式设置为turtle(海龟)。那么在绘图时,可以看见屏幕上有一只缓慢爬行的小海龟。对于此种情况,在绘制复杂图形时,势必会影响速度。因此,海龟绘图提供了以下隐藏或显示海龟光标的方法。
l showturtle()或者st()方法:用于显示海龟光标。这两种方法任选其一即可。
l hideturtle()或者ht()方法:用于隐藏海龟光标。这两种方法任选其一即可。
l isvisible()方法:用于判断海龟光标是否可见。
例如,在默认情况下,让海龟向前爬行100像素,再隐藏海龟光标,并且让海龟向下爬行100像素,代码如下:
import turtle # 导入海龟绘图模块
turtle.shape('turtle') # 改变海龟光标的形状为海龟
turtle.forward(100) # 向前爬行100像素
turtle.right(90) # 顺时针旋转90度
turtle.hideturtle() # 隐藏海龟光标
turtle.forward(100) # 向下爬行100像素
turtle.done() # 海龟绘图程序的结束语句(开始主循环)
运行程序,可以看到在绘制水平直线时,有海龟在爬行,但是在绘制向下的直线时,就没有海龟在爬行了,效果如图15.18所示。
图 1 5.18 显示与隐藏海龟光标的效果
设置画笔的速度
在海龟绘图时,默认是有绘制的动画效果的,并且速度的快慢可以通过speed()方法进行调整。
speed()方法的语法如下:
turtle.speed(speed=None)
其中,参数speed为可选参数,如果不指定,则获取当前的画笔速度;如果指定,需要将值设置为0~10之间的整数或速度字符串。速度字符串有fastest(最快)、fast(快)、normal(正常)、slow(慢)、 slowest(最慢)。当设置速度值时,0表示最快,1表示最慢,然后逐渐加快。
注意:speed = 0表示没有动画效果。forward()/back() 方法将使海龟向前/ 向后跳跃,同样的left()/right()方法将使海龟立即改变朝向。
例如,将画笔的速度设置为最快,代码如下:
turtle.speed(0) # 设置画笔的速度,0为最快
将画笔的速度设置为正常,代码如下:
turtle.speed(6) # 设置画笔的速度,6为正常
动手试一试3
任务一:绘制彩虹线条
本任务要求编写一段Python代码,使用海龟绘图绘制一条彩虹色的线条,如图15.19所示。
图15.19 绘制彩虹线条
任务二:绘制随机颜色、粗细、瓣数的雪花
本任务要求编写一段Python代码,使用海龟绘图绘制随机颜色、粗细(1~3像素)、瓣数(6~10个)的雪花