Python-Turtle库
一、Turtle库是什么
Turtle库是Python里面的一个基础绘图库
二、如何使用Turtle库
1.导入Turtle库
import turtle
2.设置绘图窗口
用turtle.setup()函数来创建一个绘图窗口
width, height, startx, starty四个参数分别表示窗口的宽度,高度,窗口在屏幕上的x坐标,y坐标
如果只输入宽度和高度的话,默认窗口在屏幕中心
turtle.setup(600,600)
用turtle.title()函数设置窗口标题
turtle.title("Welcome to Turtle")
3.绘图
正常来说,我们想要绘图的话,肯定得先有笔和纸,绘图窗口就是我们的纸,接下来我们需要设置我们用来绘图的画笔
(1)画笔的设置
画笔有三种属性,一种是宽度,另一种是颜色,以及画笔的速度
我们可以用pensize()函数设置画笔的宽度
pensize(2)
#也可以用turtle.width(2)
用pencolor(color)函数设置画笔的颜色
pencolor(red)
#也可以用turtle.color(“red”)
colormode(255)函数可以用于设置颜色模式为RGB
整数模式(3个参数分别代表R,G,B)
colormode(255)
pencolor(45,100,50)
#R:红色强度
#G:绿色强度
#B:蓝色强度
用turtle.speed()函数设置画笔的宽度
turtle.speed(1)
#参数为应为10的倍数,0为最大速度
(2)画笔的空间移动
在Turtle库中,画笔分为两种状态,抬起和放下,只有当画笔放下时才能在窗口上留下痕迹
#抬起画笔
turtle.penup()
#放下画笔
turtle.pendown()
我们通过turtle.goto()函数来让改变画笔在窗口上的坐标,这个函数有两个参数分别对应x,y坐标
turtle.goto(-40, 20)
#让画笔移动到坐标(-40,20),其中-40是x坐标,20是y坐标
用turtle.circle()函数可以画一个圆,参数为圆的半径
turtle.circle(50)
#以当前画笔的位置为中心,绘制一个半径为 50 个单位的圆
(3)画笔的角度移动
默认情况下,画笔的初始方向朝右,对应角度为 0 度,逆时针方向为正方向。
我们都学过极坐标,根据极坐标的相关知识我们可知,只需要改变两个参数就可以让画笔以不同的角度进行移动
#设置画笔的方向,其中angle是角度值,如 90 度表示向上
turtle.setheading(angle)
#让画笔向左或向右转动指定的角度
turtle.left(angle)
turtle.right(angle)
#让画笔向当前方向前进或后退指定的距离
turtle.forward(distance)
turtle.backward(distance)
在画圆的基础上画个圆弧吧,画圆弧只比画圆多了一个角度的参数,角度为正值表示逆时针绘制,为负值表示顺时针绘制
turtle.circle(50, 60)
(4)其他常用函数
done()
#保持绘图窗口的显示,防止图形绘制完成后窗口自动关闭。
clear()
#清空窗口,但画笔的位置和状态不变。
reset()
#清空窗口,并重置画笔状态为起始状态。
undo()
#撤销上一个绘图动作。
isvisible()
#返回当前画笔是否可见。
fillcolor(color)
#设置图形的填充颜色。
begin_fill()
#开始填充图形。
end_fill()
#结束填充图形。
hideturtle()
#隐藏画笔的海龟形状。
showturtle()
#显示画笔的海龟形状。
dot(d, color)
#绘制一个指定直径d和颜色(可选)的圆点。
write(x, font=("name", size, "type"))
#写出文本,x为文本内容,font参数指定字体名称、大小和类型。
三、绘图示例
1.画一个简单的五角星
import turtle
turtle.setup(600,600)
turtle.title("Welcome to Turtle")
turtle.up()
turtle.setx(-100)
turtle.pd()
turtle.pensize(5)
turtle.speed(1)
turtle.color("green","pink")
turtle.begin_fill()
for i in range(5):
turtle.fd(180)
turtle.right(144)
turtle.end_fill()
turtle.done()
运行截图如下
2.画一朵简单的玫瑰花
import turtle as t
# 定义一个曲线绘制函数
def DegreeCurve(n, r, d=1):
for i in range(n):
t.left(d)
t.circle(r, abs(d))
# 初始位置设定
s = 0.2
t.setup(450*5*s, 750*5*s)
t.pencolor("black")
t.fillcolor("red")
t.speed(10000) # 修改这里,将速度设置为整数
t.penup()
t.goto(0, 900*s)
t.pendown()
# 绘制花朵形状
t.begin_fill()
t.circle(200*s, 30)
DegreeCurve(60, 50*s)
t.circle(200*s, 30)
DegreeCurve(4, 100*s)
t.circle(200*s, 50)
DegreeCurve(50, 50*s)
t.circle(350*s, 65)
DegreeCurve(40, 70*s)
t.circle(150*s, 50)
DegreeCurve(20, 50*s, -1)
t.circle(400*s, 60)
DegreeCurve(18, 50*s)
t.fd(250*s)
t.right(150)
t.circle(-500*s, 12)
t.left(140)
t.circle(550*s, 110)
t.left(27)
t.circle(650*s, 100)
t.left(130)
t.circle(-300*s, 20)
t.right(123)
t.circle(220*s, 57)
t.end_fill()
# 绘制花枝形状
t.left(120)
t.fd(280*s)
t.left(115)
t.circle(300*s, 33)
t.left(180)
t.circle(-300*s, 33)
DegreeCurve(70, 225*s, -1)
t.circle(350*s, 104)
t.left(90)
t.circle(200*s, 105)
t.circle(-500*s, 63)
t.penup()
t.goto(170*s, -30*s)
t.pendown()
t.left(160)
DegreeCurve(20, 2500*s)
DegreeCurve(220, 250*s, -1)
# 绘制一个绿色叶子
t.fillcolor('green')
t.penup()
t.goto(670*s, -180*s)
t.pendown()
t.right(140)
t.begin_fill()
t.circle(300*s, 120)
t.left(60)
t.circle(300*s, 120)
t.end_fill()
t.penup()
t.goto(180*s, -550*s)
t.pendown()
t.right(85)
t.circle(600*s, 40)
# 绘制另一个绿色叶子
t.penup()
t.goto(-150*s, -1000*s)
t.pendown()
t.begin_fill()
t.rt(120)
t.circle(300*s, 115)
t.left(75)
t.circle(300*s, 100)
t.end_fill()
t.penup()
t.goto(430*s, -1070*s)
t.pendown()
t.right(30)
t.circle(-600*s, 35)
t.done()
运行截图如下
3.画一个简单的奥运环
import turtle
def draw_thick_circle(color, thickness, radius):
turtle.width(thickness)
turtle.color(color)
turtle.circle(radius)
def main():
# 设置初始位置和方向
turtle.speed(0) # 设置绘制速度为最快
turtle.penup()
# 绘制五个圆环的位置
positions = [(-110, 0), (-55, 0), (0, 0), (-82.5, -50), (-27.5, -50)]
colors = ['blue', 'black', 'red', 'yellow', 'green']
thickness = 10 # 线条宽度
for color, position in zip(colors, positions):
turtle.goto(position)
turtle.pendown()
draw_thick_circle(color, thickness, 50) # 绘制半径为50的圆环
turtle.penup()
# 隐藏turtle光标
turtle.hideturtle()
# 完成绘制
turtle.done()
if __name__ == "__main__":
main()
运行截图如下
作者:FloWit233