时间:2023-01-22 11:45:00 | 栏目:Python代码 | 点击:次
turtle库是Python语言中一个很流行的绘制图像的函数库,可以轻松地绘制出精美的形状和图案,很适合用来引导孩子学习编程。
turtle模块(module)是Python语言中的标准模块(内置模块)之一。
【在Python中,模块也称作库(Library)】
画布(canvas),turtle模块展开用于绘图的区域,可以设置其大小和初始位置。
turtle 中默认的模式为 standard ,其坐标原点在画布(canvas)中心,单位为象素(pixel)。turtle空间坐标体系分为位置坐标系和角度坐标系,画布默认大小(400, 300),对于位置坐标系而言,与数学中的直角坐标系相同,正中心的坐标就是(0,0),你可以想象一个小乌龟,在一个横轴为x、纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行的路径上绘制了图形。goto函数有两个参数X,Y,指的是让在任何位置的海龟去到达某一个坐标的位置。对于角度坐标系而言,以x轴正方向为0度,逆时针为角度正值,顺时针为角度负值,也与数学中的相同。
import turtle
turtle定义窗体(窗口)的大小和位置的函数setup()
setup()函数改变窗体(窗口)的大小,确定画布空间的大小及在屏幕中的位置,格式:
turtle.setup (width,height,startx,starty)
width, height: 输入宽和高为整数时, 表示像素; 为小数时, 表示占据电脑屏幕的比例;(startx, starty): 这一坐标表示 矩形窗口左上角顶点的位置, 如果为空,则窗口位于屏幕中心。
参见下图:
单位为像素。
屏幕的的左上角为原点。
例、
import turtle turtle.setup(800,500,0,0)
参见如下示意图:
又如:
turtle.setup(width=0.6, height=0.6) turtle.setup(width=800, height=800, startx=100, starty=100)
turtle定义定义了画布的大小和背景色函数screensize()
screensize()函数改变画布的大小和背景色,格式:
turtle.screensize(canvwidth=None, canvheight=None, bg=None)
参数分别为画布的宽(单位像素), 高, 背景颜色
如:
import turtle turtle.screensize(480, 360,"green")
窗体和画布不是一个概念。如果画布大于窗体,窗体会出现滚动条,如果画布小于窗体,画布会填充整个窗体。想要改变窗体(窗口)的大小,不是用screensize函数,要用setup函数。
窗体大于画布,画布填充了窗体。测试代码:
import turtle turtle.setup(300,200) turtle.screensize(200,100,"blue") turtle.shape("turtle") #出现小乌龟
运行之,参见下图:
画布大于窗体,窗体出现滚动条。测试代码:
import turtle turtle.setup(300,200) turtle.screensize(500,400,"blue") turtle.shape("turtle") #出现小乌龟
运行之,参见下图:
方法1
import turtle turtle.circle(10) #使用turtle
方法2
from turtle import * circle(10) #使用turtle
方法3
import turtle as t t.circle(10) #使用turtle
turtle库包含近百个功能函数。在此我们介绍一些常用的函数:
绘制状态函数:pendown()、penup()、pensize()
别名 |
参数说明 |
功能/作用 |
|
pendown() |
pd() 或down() |
无 |
落下画笔,之后移动画笔绘制。 |
penup() |
pu()或up() |
无 |
抬起画笔,之后移动画笔不绘制。 |
pensize(width) |
width(width) |
width:设置的画笔线条宽度,如果为None或者为空,则返回当前画笔宽度 |
设置画笔宽度,当无参数输入时返回当前画笔宽度。 |
颜色控制函数:color()、pencolor()、begin_fill()、end_fill();
函数名 |
别名 |
参数说明 |
功能/作用 |
color(colorstring) 或 color((r,g,b)) 或 color(r,g,b) 或 color(colorstr1,colorstr2)或 color((r1,g1,b1),(r2,g2,b2)) |
|
当画笔和填充颜色相同时使用1个参数; 当画笔和填充颜色不同时使用2个参数。
colorstring:表示颜色的字符串,例如:“Purple","red","blue"等。还支持十六进制颜色值,如:"#6666CC"等 (r,g,b):颜色对应RGB的值,如绿色用rgb(0, 128, 0)。【注】 |
返回设置画笔或填充颜色,当无参数输入时返回当前画笔及填充颜色。 |
pencolor(colorstring) 或 pencolor((r,g,b)) 或 pencolor(r,g,b) |
|
colorstring:表示颜色的字符串,例如:“Purple","red","blue"等。还支持十六进制颜色值,如:"#6666CC"等
(r,g,b):颜色对应的RGB的值,如绿色用rgb(0, 128, 0)。【注】 |
返回或设置画笔颜色,当无参数输入时返回当前画笔颜色。 |
begin_fill() |
|
无 |
在绘制带有填充色彩图形之前调用,表示填充开始。 |
,end_fill() |
|
无 |
在绘制带有填充色彩图形之后调用,表示填充结束。 |
fillcolor(colorstring) 或 fillcolor((r,g,b)) 或 fillcolor(r,g,b) |
colorstring:表示颜色的字符串,例如:“Purple","red","blue"等。还支持十六进制颜色值,如:"#6666CC"等 (r,g,b):颜色对应的RGB的值,如绿色用rgb(0, 128, 0)。【注】 |
填充色彩 | |
【注】
turtle模块(库)中用字符串表示颜色,如
"red"表示红色
"black"表示黑色
"blue"表示蓝色
"orange"表示橘黄色
"green"表示绿色
"gold"表示金色
"yellow"表示红色
"pink"表示粉色
还支持十六进制颜色值,如:"#6666CC"、"#FF0000"、"#CCFFFF"等。
turtle模块(库)中用RGB三原色表示颜色
关于RGB三原色表示颜色简介
当R值取满为255,G与B都取0时表示红色,当G值取满为255,R与B都取0时表示绿色,当B值取满为255,R与G都取0时表示蓝色,其他情况所得颜色即为红(R)、绿(G)、蓝(B)三个颜色通道的叠加颜色。常见叠加颜色如下表
颜色名称 |
红色值 Red |
绿色值 Green |
蓝色值 Blue |
黑色 |
0 |
0 |
0 |
蓝色 |
0 |
0 |
255 |
绿色 |
0 |
255 |
0 |
青色 |
0 |
255 |
255 |
红色 |
255 |
0 |
0 |
洋红色(亮紫色) |
255 |
0 |
255 |
黄色 |
255 |
255 |
0 |
白色 |
255 |
255 |
255 |
用R、G、B对应的三元组来表示颜色。例如:(255,0,0)表示红色,(0,255,0)表示绿色。
运动控制函数:forward()、backward()、right()、left()、setheading()、goto()、circle()
函数名 |
别名 |
参数说明 |
功能/作用 |
forward(distance) |
fd(distance) |
distance:行进距离的像素值。当值为负数时,表示向相反方向前进。 |
向画笔当前行进方向前进distance距离。 |
backward(distance) 或 back(distance) |
bk(distance) |
distance:行进距离的像素值。当值为负值时,表示向前进方向行进。backward()函数不改变画笔的运动方向,相当于后退着行进。 |
向当前画笔前进方向的反方向行进distance距离。 |
right(angle) |
rt(angle) |
angle:角度整数值。 |
以当前行进角度为原点,行进方向向右改变相对角度值angle |
left(angle) |
lt(angle) |
angle:角度的整数值。 |
以当前行进角度为原点,行进方向向左改变相对角度值angle。 |
setheading(to_angle) |
seth(to_angle) |
to_angle:角度的整数值。 |
作用:设置画笔当前行进方向的角度为to_angle,该角度为绝对方向角度值。 |
goto(x,y) |
|
x,y:x为标系的绝对横坐标值,y为置为坐标系的绝对纵坐标值。 |
将画笔移动到绝对位置(x,y)处。 |
circle(radius[,extent=None]) [还有一个参数,在此未讲] |
|
radius:弧形半径,当值为正数时,半径在画笔左侧。当值为负数时,半径在画笔右侧。 extent:绘制弧形角度。当不给该参数或该参数为None时,绘制整个圆形。当extent的值为正数时,顺当前方向绘制弧形;当extent的值为负数时,逆当前方向绘制弧形。 |
根据半径radius绘制extent角度的弧形。
|
【angle即角度,也可以为负数。distance即距离,也可以为负数】
除此之外,再简要介绍一些函数如下
画笔控制函数
函数名 |
说明 |
turtle.shape(name) |
name指定乌龟状:“arrow”, “turtle”, “circle”, “square”, “triangle”, “classic”。默认"classic" 如turtle.shape('turtle') |
turtle.hideturtle() |
隐藏画笔的turtle形状 |
turtle.showturtle() |
显示画笔的turtle形状 |
全局控制函数
函数名 |
说明 |
turtle.clear() |
清空turtle窗口,但是turtle的位置和状态不会改变 |
turtle.reset() |
清空窗口,重置turtle状态为起始状态 |
turtle.undo() |
撤销上一个turtle动作 |
turtle.isvisible() |
返回当前turtle是否可见 |
stamp() |
复制当前图形 |
turtle.write(s [,font=("font-name",font_size,"font_type")]) |
写文本,s为文本内容,font是字体的参数,分别为字体名称,大小和类型;font为可选项,font参数也是可选项。字体名称:"Arial"、"宋体"、"楷体"等 |
import turtle turtle.penup() #抬起画笔 turtle.goto(-200,100) #移动位置 turtle.write("好好学习,天天向上",font=("楷体",36))
其它函数
函数名 |
说明 |
|||||||||
turtle.mainloop() 或 turtle.done() |
启动事件循环 -调用Tkinter的mainloop函数。 必须是乌龟图形程序中的最后一个语句。 |
|||||||||
turtle.mode(mode=None) |
设置乌龟模式(“standard”,“logo”或“world”)并执行重置。如果没有给出模式,则返回当前模式。
|
|||||||||
turtle.delay(delay=None) |
设置或返回以毫秒为单位的绘图延迟。 |
|||||||||
turtle.begin_poly() |
开始记录多边形的顶点。当前的乌龟位置是多边形的第一个顶点。 |
|||||||||
turtle.end_poly() |
停止记录多边形的顶点。当前的乌龟位置是多边形的最后一个顶点。将与第一个顶点相连。 |
|||||||||
turtle.get_poly() |
返回最后记录的多边形。 |
第一步:让Python引入turtle模块,引入模块就是告诉Python你想要用它。
import turtle
第二步:创建画布,若使用默认可跳过此步。
第三步:理顺思路,选取函数绘图实现意图,这是最重要的一步,可能需要多次试验。
下面给出几个例子
例1、绘制梯形
此梯形绘制在第四象限,所以梯形形每个顶点的坐标中,x坐标为正,y坐标为负。四个点的坐标分别选择为D(100,-100)、E(200,-100)、F(250,-200)、G(50,-200)。可见所绘制的直角三角形DE=100,GF=200。由于D点的y坐标与E点的y坐标相等,所以,DE平行于x轴,由于G点的y坐标与F点的y坐标相等,所以,GF也平行于x轴。代码为:
import turtle turtle.up() turtle.fillcolor('yellow') turtle.begin_fill() turtle.goto(100,-100) turtle.down() turtle.goto(200,-100) turtle.goto(250,-200) turtle.goto(50,-200) turtle.goto(100,-100) turtle.end_fill()
思考一下,如何将梯形绘制在正中间?
例2、使用circle()函数的例子
import turtle turtle.pencolor("red") turtle.circle(50) #整圆 turtle.pencolor("blue") turtle.circle(120, 180) #半圆 turtle.pencolor("green") turtle.circle(80,steps=3) #三角形
例3、画五角星
import turtle turtle.pensize(5) turtle.pencolor("yellow") turtle.fillcolor("red") turtle.begin_fill() for i in range(5): turtle.forward(200) turtle.right(144) turtle.end_fill() turtle.hideturtle()