Python turtle库,库的引用、基本使用方法,tutle库练习(画圆、画角、画线条、五星红旗),使用rgb颜色,turtle绘画结束后,画布不消失的三种方法
Python学习总结–turtle库
turtle库,又被称为海龟,是能够进行绘图操作的一个标准库,包含许多用来图形绘制的方法。
在画布上,默认有一个坐标原点为画布中心的坐标轴, 坐标原点上有一只面朝x轴正方向小乌龟。这里我们描述小乌龟时使用了两个词语:标原点(位置),面朝x轴正方向(方向),turtle绘图中, 就是使用位置方向描述小乌龟(画笔)的状态。
使用Python中的turtle库不需要特别的准备。要使用turtle库,你需要确保你的Python环境已经安装,并知道如何导入和使用turtle库。
一、库的引用
如python中的其他标准库和三方库一般,想要使用,需在程序开始处进行库的引用,引用方式主要有以下几种:
1、import turtle
:直接引入对应的库
备注:使用这种方式引入库,那么在对turtle库中的函数进行调用时,需要使用这种形式:turtle. 函数名()
例如:
# circle()是turtle库中的一个用来绘制圆的函数
import turtle
turtle. circle(100)
2、from turtle import *
:直接从turtle库中引入其所有的函数
备注:在对turtle库中的函数进行调用时,函数名前不用加turtle库名,即使用这种形式:函数名()
例如:
from turtle import *
circle(100) #直接调用
3、import turtle as t
:直接引入库,并给库取一个别名
例如:
import turtle as t
t. circle(100) #画一个圈
备注:这种方式与方式一很像,在需要多次调用turtle库的函数时,可使用别名简化代码
二、turtle库的基本使用
1、窗体函数:
1)设置窗口的函数:turtle. setup(width,height,starts,starty)
作用:设置绘图窗口的宽高和位置
其中:
width
:表示绘图窗口的宽度,值是整数,表示的是像素值;值是小数,表示窗口宽度与屏幕的比例。
height
:表示绘图窗口的高度,值是整数,表示的是像素值;值是小数,表示窗口高度与屏幕的比例。
startx
:表示绘图窗口左侧与屏幕左侧的像素距离。若不填,默认窗口位于屏幕水平居中。
starty
:表示绘图窗口顶部与屏幕顶部的像素距离。若不填,默认窗口位于屏幕垂直居中。
2)画布背景色设置:turtle. bgcolor("red")
3)画笔上箭头的隐藏与显示**:
turtle. hideturtle()
隐藏
turtle. showturtle()
显示
4)设置画笔的移动速度:turtle. speed(n)
设置画笔移动速度,画笔绘制的速度范围[0,10]整数,数字越大越快。
2、画笔状态的函数:有多种,具体见下述
1)提起及放下画笔的函数:这是两个函数,一般都配套使用。
完整形式:
turtle. penup() 提起画笔
turtle. pendown() 放下画笔
作用:提起画笔后,移动画笔或者绘图,均不会在画布上留下痕迹。放下画笔后,移动画笔或者绘图,均会在画布上留下痕迹。
2)画笔状态设置:
turtle. pensize(数字)
:画笔粗细
turtle.pencolor('颜色')
:画笔颜色
turtle.fillcolor('颜色')
:画笔填充颜色
也可以混合使用:turtle. pen(pensize,pencolor,fillcolor)
例如:
(1)turtle. pensize(30):设置画笔的粗细
(2)turtle. color(pencolor,fillcolor):设置画笔的颜色及填充颜色
(3)turtle. fillcolor("blue"):设置图案的填充颜色
3、画笔状态设置:图案颜色填充函数:
turtle. begin_fill()
:开始填充
turtle. end_fill()
:结束填充
具体使用场景如下:
#绘制的一个半径为100内部为蓝色的圆
import turtle as turtle
turtle. fillcolor("blue")
turtle. begin_fill()
turtle. circle(50)
turtle. end_fill()
结果:
4、画笔状态设置:画笔移动操作的函数:
1)直线运动操作的函数:
(1) turtle.forward(200)
作用:往前画长度为200像素的直线(画笔初始方向默认为水平向右)
(2) turtle.backward(300)
作用:往后画长度为300像素的直线(画笔方向保持不变)
2)改变画笔方向的函数:
(1) turtle.right(90)
作用:画笔沿顺时针方向旋转90度
(2) turtle.left(90)
作用:画笔沿逆时针方向旋转90度
(3) turtle.setheading(90)
作用:画笔沿逆时针方向旋转90度
备注:括号里面的参数可正可负,正如上述,负为反方向
3)改变画笔当前位置的函数:
(1) turtle.goto(x,y)
作用:将画笔从当前位置移动到(x,y)处,x、y为具体像素坐标值(以初始点为坐标原点)
(2) turtle.setpos(x,y)
作用:将画笔从当前位置移动到(x,y)处,x、y为具体像素坐标值(以初始点为坐标原点)
(3) turtle. setx(x)
作用:将画笔从当前位置水平移动到横坐标为x处,x为具体像素坐标值(纵坐标不变)
(4) turtle. set y(y)
作用:将画笔从当前位置竖直移动到纵坐标为y处,y为具体像素坐标值(横坐标不变)
5、画布的全局操作:
1)turtle. clear()
作用:清空turtle画布,但是turtle画笔的位置和状态不变
2)turtle. reset()
作用:清空并复位turtle画布窗口,重置画笔状态(但是画布背景色不变)
3)turtle. undo()
作用:撤销上一个turtle绘图动作
4)turtle. isvisible()
作用:返回当前turtle画布是否可见,若可见,返回True,否则返回False
三、练习
1. 画圆–练习奥运五环
代码:
#一般形式
import turtle as t #召唤海龟先生
t.pensize(5) #画笔粗细
#第一个圈
t.color("black") #把画笔颜色改为黑色
t.circle(50) #画圆
#第二个圆
t.color("red")#把画笔颜色改为黑色
t.penup()#抬笔
t.goto(-100,0)#移动到-100,0
t.pendown() #落笔
t.circle(50)
#第三个圆
t.color("blue")
t.penup()
t.goto(100,0)
t.pendown()
t.circle(50)
#第四个圆
t.color("green")
t.penup()
t.goto(-50,-50)
t.pendown()
t.circle(50)
#第五个圆
t.color("yellow")
t.penup()
t.goto(50,-50)
t.pendown()
t.circle(50)
或者使用函数:定义drawCircle函数,使代码简约易理解
#函数形式
import turtle as t #召唤海龟先生
t.pensize(5)
def drawCircle(color,x,y):
t.color(color)
t.goto(x,y)
t.pendown()
t.circle(50)
t.penup()
drawCircle("black",0,0)
drawCircle("red",-100,0)
drawCircle("blue",100,0)
drawCircle("green",-50,-50)
drawCircle("yellow",50,-50)
2. 画角
1)画正方形drawRectangle
-
开始填充
.begin_fill()
-
结束填充
end_fill()
-
向右转
.right(度数)
-
向左转
.left(度数)
-
直走
.forward(xxx)
import turtle as t
t.forward(100)
t.right(90)
t.forward(100)
t.right(90)
t.forward(100)
t.right(90)
t.forward(100)
t.right(90)
t.penup()
t.goto(-200,-100)
def draw_rectangle(side):
t.pendown()
for i in range(4):
t.forward(side)
t.right(90)
t.penup()
draw_rectangle(50)
如图,画了两个正方形:
2)画三角形 drawTriangle
turtle.goto(x,y)
让画笔沿直线移动到坐标点(x,y)处
turtle.setpos(x,y)
与goto命令一样,作用也是让画笔沿直线移动到坐标点(x,y)处
turtle.sex(x)
只改变x坐标,让画笔产生移动
turtle.sex(y)
只改变y坐标,让画笔产生移动
x,y=turtle.pos()
返回画笔当前位置的坐标
turtle.seth(degree)
用于设置画笔的方向,参数degree为画笔方向与海龟坐标系x轴正向的夹角度数。
import turtle as t
# 第一个三角形 原始的方式
t.color('dark green')
t.begin_fill() #填充的起点
t.forward(100)
t.left(120)
t.forward(100)
t.left(120)
t.forward(100)
t.end_fill() #填充的终点(闭合)
# 第二个三角形 加入for循环
t.penup()
t.setpos(-100,-100)
t.pendown()
t.color('red')
t.begin_fill()
for i in range(3):
t.forward(100)
t.left(120)
t.end_fill()
# 第三个三角形 利用函数+for循环
t.penup()
t.setpos(200,-100)
def draw_trangle(): #函数形式
t.pendown()
t.color('black')
t.begin_fill()
for i in range(3):
t.forward(100)
t.left(120)
t.end_fill()
draw_trangle()
如图,画了三个三角形:
3)画多边形 drawPolygon
注意点:熟知内角和的度数。【多边形的内角及内角和 = (n-2)*180°】
- 五角形
- 六角形
- …
import turtle as t
# 第一个五角形
t.color('red')
t.forward(100)
t.left(72)
t.forward(100)
t.left(72)
t.forward(100)
t.left(72)
t.forward(100)
t.left(72)
t.forward(100)
# 第二个五角形
t.penup()
t.setpos(-200,-200)
t.pendown()
t.color('green')
t.begin_fill()
for i in range(5):
t.forward(100)
t.left(72)
t.end_fill()
t.penup()
t.setpos(200,-200)
# 第三个五角形
def draw_pentagon():
t.pendown()
t.color('green')
t.begin_fill()
for i in range(5):
t.forward(100)
t.left(72)
t.end_fill()
draw_pentagon()
t.exitonclick() #点击画布时,画布才消失
如图,画了三个五边形:
4)画五角星形drawEive-pointedstar
五角星的角的度数 36°
import turtle as t
t.color('dark green')
t.begin_fill()
for i in range(5):
t.forward(100)
t.right(144)
t.end_fill()
如图:
另一种方式:
import turtle as t
t.color('dark green')
t.begin fill()
forin range(5):
t.forward(30)
t.left(72)
t.forward(30)
t.right (144)
t.end fill()
5)画五星红旗
-
新建一个窗口:
t.Screen()
-
让画笔沿直线移动到坐标点(x,y)处:
.setpos(x.y)
-
设置背景颜色:
Object.bgcolor(color)
-
设置窗口宽、高:
Obiect.setup(width,height)
-
隐藏画笔箭头:
setheading(degre)
'''
1.画五星红旗D底色为红色 矩形框宽和高比为3比2
2.确定几颗星星的位置
3.小星星旋转一个角度指向大星星
'''
import turtle as t
window = t.Screen()
window.setup(900,600)
window.bgcolor('red')
t.speed(0)
map = t.Screen()
map.setup(900,600)
map.bgcolor('red')
# t.screensize(800,600)
# t.bgcolor('red')
def draw_5pointedstar(x,y,degree,side):
t.setpos(x,y)
t.setheading(degree)
t.pendown()
t.color('yellow')
t.begin_fill()
for i in range(5):
t.forward(side)
t.left(72)
t.forward(side)
t.right(144)
t.end_fill()
t.penup()
#大五星
t.penup ()
draw_5pointedstar(-390,180,0,65)
#右上第1颗小五角星
draw_5pointedstar(-170,260,330,15)
#右上第2颗小五角星
draw_5pointedstar(-120,170,30,15)
#第3颗小五角星
draw_5pointedstar(-120,100,0,15)
#第4颗小五角星
draw_5pointedstar(-170,60,330,15)
t.hideturtle()
t.exitonclick()
爱我中华!
6)叠边形
import turtle as t
t.pensize(5)
t.pencolor("black")
for i in range(9): #一共有9条边,顾循环9次
t.forward(100)
t.left(80) #叠边形的内角为100,偏移角度为80
t.exitonclick()
如图:
3. 线条艺术
1)贝壳
#贝壳
import turtle as t
t.speed(15) #调整画笔的速度
for x in range(20):
t.circle(x*3)
t.exitonclick()
如图:
2)让贝壳旋转起来
# 利用for循环
import turtle as t
t.speed(20)
for x in range(30):
t.circle(x*3)
t.left(90) #旋转90°
t.exitonclick()
#或者利用while循环
如图:
3)迷宫
import turtle as t
t.speed(100)
X = 0
while X < 50 :
t.forward(X * 3)
t.left(90)
X+=1
t.exitonclick()
如图:
4.色彩
1)使用RGB表达色彩
这里用到了随机函数random.randint()
,使用前需要导入 import random
import turtle as t
import random #导入
screen = t.Screen() #创建新的窗口
screen.colormode(255)
t.speed(20)
t.pensize(2)
for x in range(50): #利用随机函数随机获取rgb三种颜色
r = random.randint(0,255)
g = random.randint(0,255)
b = random.randint(0,255)
t.color(r,g,b)
t.circle(x)
t.left(90)
t.exitonclick()
如图:
2)如何适用多种颜色?
import turtle as t
window = t.Screen()
window.bgcolor('black')
# sides = eval(input("输入要绘制的边的数目 (2-6) !"))
sides = 6
t.speed(20)
colors =["red","yellow","green","blue","orange","purple"]
for x in range(100):
t.pencolor(colors[x % sides])
t.forward(x * 3 / sides + x)
t.left(360 / sides + 1)
t.width(x* sides / 200)
t.exitonclick()
如图:
三、turtle绘画结束后,画布不消失的三种方法
在pycharm/vscode中绘图完毕,画布总会消失。有三种方法能让turtle绘画结束后画布不消失,如下最后三个语句:`
turtle.exitonclick()
#点击画面时画布才会消失turtle.mainloop()
#这种方法会使得后面的代码无法运行turtle.done()
#这种方法会使得后面的代码无法运行