- Python程序设计
- 张雪萍主编
- 3233字
- 2020-08-27 23:59:43
1.5 绘图
在Python中有很多编写图形程序的方法,一个简单的启动图形化程序设计的方法是使用Python 内置的turtle 库。turtle 库是Python 内置的绘制线、圆及其他形状(包括文本)的图形库。
turtle 库是 Python 的标准库之一。turtle 库是一个简单但很流行的绘制图形的函数库,它提供了一个小海龟(一支画笔),你可以把它理解为一个海龟机器人,根据指令在绘图窗口中爬行。小海龟初始位于横轴为 x、纵轴为 y 的坐标系原点,小海龟最初所在的这个原点(0,0)在绘图窗口的正中间(注意:不是计算机屏幕窗口左上角的原点),小海龟面向 x 轴的正方向(向右)。在一组函数指令的控制下,小海龟可以在这个平面坐标系中爬行,爬行所经过的轨迹形成了绘制的图形。
1.5.1 创建turtle对象
在导入turtle库时,实际上就创建了一个turtle对象,然后,可以调用turtle对象的各种方法来完成不同的图形绘制。
1.理解Turtle类创建的turtle对象
当通过调用 turtle 库的 Turtle 类来创建一个 turtle 对象时,它的位置被设定在原点(0,0)处——绘图窗口的正中心,而且它的方向被设置为向右,即小海龟面向 x 轴的正方向。
执行以上命令后,弹出了绘图窗口,并且小海龟(画笔)位于窗口的正中心,画笔笔尖向右,如图1-24所示。
图1-24 小海龟位于窗口的中心
执行以上命令,可将小海龟(画笔笔尖)的颜色变成红色。
turtle 模块用画笔(想象成一只小海龟)来绘制图形。默认情况下,画笔的笔尖是向下的(就像真实的笔尖触碰一张纸一样)。由于笔尖是向下的,当移动画笔的时候,它就会绘制出一条从当前位置到新位置的线,理解为小海龟从当前位置爬行到新位置,爬行经过的路径所留下的痕迹就形成了绘制的图形。
以上输出结果表明,海龟的前进方向是向右的。
tl.forward(100):小海龟从当前的原点(0,0)向右爬行了 100(单位是像素),到达坐标位置(100,0)处,爬行所经过的路径形成了一条直线。
【例1-15】 绘制正方形,其中,两边是红色,两边是绿色。
通过调用 turtle 库里的 Turtle 类创建一个绘图窗口的实例,接下来的图形绘制都是在这个图形窗口中进行的。初始化海龟在原点(0,0)处,即绘图窗口的正中心,并且注意海龟的行进方向(或者说画笔笔尖的方向)设置为向右。
请运行以上程序,注意观察海龟的运动轨迹。
说明:方向控制方法(left()、right())指的是在海龟当前行进方向上进行左转或右转,因此,弄清楚海龟(画笔笔尖)当前的行进方向很重要。
2.不使用Turtle类完成图形的绘制
上面是通过调用 turtle 库里的 Turtle 类来创建一个绘图窗口的实例,但是也可以不通过这种方法来完成图形的绘制,请看下面的代码。
【例1-16】 绘制正方形,其中两边是红色,两边是绿色。
1.5.2 turtle绘图的基础知识
1.设置绘图窗体大小
画布是turtle中用于绘图的区域,即turtle的绘图窗口,可以设置它的大小和初始位置。turtle的画布空间中的最小单位是像素。
1)screensize方法
参数分别为画布的宽(单位像素)、高及背景颜色,如果省略参数,则将绘制一个大小为400×300的窗口,并返回当前窗口的宽度和高度。
canvwidth——正整数;
canvheight——正整数;
bg——表示绘图窗口的背景颜色,可用颜色字符串表示,或者用RGB元组表示。
【例1-17】 绘制一个大小为400×300的窗口,背景颜色为默认色白色。
【例 1-18】 绘制一个大小为 2000×1500 的窗口,背景颜色为白色,此时窗口会显示水平和垂直滚动条。
绘图窗口的绘制也可以用以下方法来完成。
2)setup方法
turtle.setup(width,height,startx=None,starty=None)
设置绘图窗口的大小及位置,这里的位置(startx,starty)指的是绘图窗口左上角相较于计算机屏幕窗口(计算机屏幕窗口原点在屏幕窗口的左上角)的坐标位置(见图1-25)[8]。
图1-25 绘图窗口和计算机屏幕的相对位置
当width、height的值为整数时,表示像素;当为小数时,表示占据计算机屏幕的比例;默认width=0.5,height=0.75。
(startx,starty)这一坐标表示绘图窗口左上角顶点的位置,如果为空,则绘图窗口位于计算机屏幕中心。
当 startx 的值为正数时,指的是窗口左边距离计算机屏幕左边的距离;当为负数时,则表示窗口右边距离计算机屏幕右边的距离。
当 starty 的值为正数时,指的是窗口顶部距离计算机屏幕顶部的距离;当为负数时,则表示窗口底部距离计算机屏幕底部的距离。
【例 1-19】 设置绘图窗口大小为 200×200 像素,位于计算机屏幕左上方(窗口左上角与计算机屏幕原点重合)。
【例 1-20】 设置绘图窗口的宽度和高度分别是计算机屏幕的 75%和 50%,位于计算机屏幕正中心。
通过改变startx和starty的值来观察窗口的变化情况。
2.screensize方法和setup方法的异同点
虽然turtle.screensize()和turtle.setup()都能绘制窗口,但它们有不同之处。
(1)turtle.screensize()可以设置绘图窗口的背景颜色,而turtle.setup()不能。
(2)turtle.screensize()绘制窗口时,无论给出的宽度和高度是多少,所绘制的窗口在屏幕上显示的都为 400×300。超过这个大小,窗口会显示水平和垂直滚动条。而turtle.setup()会根据给定的宽度、高度值来绘制窗口。
(3)turtle.screensize()所绘制的窗口位于计算机屏幕上固定的位置,而 turtle.setup()可以指定它在计算机屏幕上的位置。
其实,以上两个方法在图形绘制过程中并不是必需的,请参考1.5.1节绘制正方形的第2种方法。
1.5.3 利用turtle库提供的方法绘制图形
turtle 库提供了很多方法,通过这些方法可以让海龟(画笔)在绘图窗口中游走,从而完成图形的绘制。这里主要介绍 3 类方法:画笔控制方法、运动控制方法及全局控制方法。更多的方法及使用方式可用“help(turtle)”进行查阅,如图1-26所示。
图1-26 如何使用help命令
在图 1-26 界面中,还可以通过按下“Ctrl+F”快捷键弹出搜索框进行关键字的查阅(见图1-27)。
图1-27 按Ctrl+F快捷键弹出搜索框
1.turtle画笔控制方法
通过画笔控制方法可以设置画笔的粗细和颜色、画笔笔尖抬起(此时走过的路径就不会形成图形)、画笔笔尖放下等,配合运动控制方法就能画出我们想要的图形。turtle画笔控制方法如表1-4所示。
表1-4 turtle画笔控制方法
可以通过设置turtle.color(pencolor,fillcolor)来设置画笔颜色和封闭图形的填充色,第1 个参数 pencolor 代表画笔颜色,第 2 个参数 fillcolor 代表填充色。如果只有 1 个参数,那就意味着画笔颜色和填充色都用同一种颜色。
turtle.color(pencolor,fillcolor)更为详细的用法可通过help(turtle.color)进行查阅。
【例1-21】 绘制一个红色三角形及一个×。
运行结果如图1-28所示。
图1-28 运行结果(一)
turtle 库默认采用 RGB 的小数值来表示颜色,但可通过 turtle.colormode(mode)进行模式设置,即切换使用整数值来表示颜色。由红、绿、蓝3种颜色可构成我们所看到的任意颜色,RGB指红、绿、蓝3种颜色通道的组合。常用的RGB颜色值如表1-5所示[8]。
表1-5 常用RGB颜色值
2.turtle运动控制方法
通过操纵海龟在绘图窗口中的行进,可以完成图形的绘制。控制海龟行进的时候,海龟可以走直线,也可以走曲线。完成这些操作的方法可参见表1-6。
注意:(1)凡是在没有抬起画笔笔尖的情况下移动画笔都会形成图形。
(2)海龟(画笔笔尖)后退时,画笔笔尖方向并不改变(这一点尤其要注意)。
表1-6 画笔运动方法
3.turtle全局控制方法
turtle全局控制方法可参见表1-7。
表1-7 turtle全局控制方法
“turtle.write()”方法的作用是将文本写在当前画笔(海龟)所在位置,同时可以通过“move”选项来确定文本写入后画笔(海龟)是否移动位置。每个参数的具体含义如下:
s——输出文本内容,也可以输出多行内容,用“'\n'”进行换行处理。
move——有两个取值,True和False。
move=False为默认值。
move=True,则在写入文本内容后,画笔(海龟)会移动到文本内容的右下角处。
move=False,则在写入文本内容后,画笔(海龟)不会移动位置。
只要带有 move 参数,输出的文本内容就会有画笔走过留下的痕迹,所以,通常不设置该参数。
align——有3个取值,'left'、'right'和'center'。
align='left'为默认值。
align='left',文本从画笔的当前位置开始写,写完文本内容后,画笔会移动到文本内容右下角的最后一个字后。
align='right',此时有两点要注意:①文本最后一个字的位置为当前画笔所在位置,即系统自动根据文本内容多少选择从何处开始写,但写完后的位置为当前画笔所在位置;②无论 move 的值设定为 True 还是 False,画笔都不会移动,但还是有画笔走过留下的痕迹。
align='center',文本输出在当前画笔的中心位置,写完文本内容后,画笔会移动到文本内容右下角的最后一个字后。
对于font=(fontname,fontsize,fonttype),fontname和fonttype均为字符串,分别表示输出字体的名称和类型,fontsize为字体大小。
fonttype可取'normal','bold','italic','underline',还可以自由组合,如'bold italic'。
fontname可取'Arial'、'Times New Roman'、'宋体'、'楷体'、'黑体'、'微软雅黑'等。
关于该方法的更多细节也可以通过help(turtle.write)进行查阅。
4.示例
【例1-22】 绘制图文。
运行结果如图1-29所示。
图1-29 运行结果(二)