- 1. turtle库-概念
- 1.1 turtle库-对turtle库的定义
- 1.1.1 turtle库-什么是turtle库?
- 1.2 turtle库-turtle库坐标系统
- 1.2.1 turtle库-standard坐标角度系统
- 1.2.2 turtle库-logo坐标角度系统
- 2. turtle库-使用
- 2.1 turtle库-引入turtle库的三种方式
- 2.1.1 方式①:import turtle (直接引用)
- 2.1.2 方式②:import turtle as t (替代式引用)
- 2.1.3 方式③:from turtle import * (省略式引用)
- 2.2 turtle库-画布与窗口
- 2.2.1 画布-screensize() 函数设置画布大小及背景色
- 2.2.2 窗口(窗体)-turtle.setup() 函数设置窗口大小及位置
- 2.3 turtle库-画笔参数
- 2.3.1 宽度-pensize()函数设置画笔的粗细
- 2.3.2 颜色-pencolor()函数设置画笔的颜色
- 2.3.3 移速-turtle.speed()函数设置画笔移动速度
- 2.4 turtle库-常用绘图函数
- 2.4.1 done()函数-停止画笔绘制,但绘图窗口不关闭
- 2.4.2 forward()函数-向当前画笔方向移动distance个像素长度
- 2.4.3 backward()函数-向当前画笔相反方向移动distance个像素长度
- 2.4.4 right()函数-顺时针移动degree度
- 2.4.5 left()函数-逆时针移动degree度
- 2.4.6 seth()函数-绝对坐标系下偏转绝对角度
- 2.4.7 penup()函数-抬起画笔不显示移动轨迹
- 2.4.8 pendown()函数-落下画笔显示移动轨迹
- 2.4.9 goto()函数-从原点移动轨迹到指定坐标
- 2.4.10 circle(r )函数-画出半径为r的圆
- 2.4.11 circle(r,extent)函数-绘制一个半径为 r,角度为extent的圆或弧形
- 2.4.12 turtle.dot(r, e)函数-绘制一个半径为r,颜色为e的圆
- 2.4.13 turtle.shape()函数-画笔箭头变成小乌龟
- 2.4.14 hideturtle()函数-隐藏画笔箭头
- 2.4.15 showturtle()函数-显示画笔箭头
- 2.4.16 fillcolor()函数、begin_fill()函数、end_fill()函数-给绘制的图形填充颜色
- 2.4.17 turtle.color(color1, color2)函数-同时设置画笔颜色、填充颜色
- 2.4.18 turtle.write()函数-写文字
- 2.4.19 turtle.home()函数-将画笔移动到原点
- 2.4.20 turtle.bgcolor()函数-设置背景颜色
- 2.5 turtle库-实例演示
- 2.5.1 实例演示-五色填正方形组合图案
- 2.5.2 实例演示-五角星
- 2.5.3 实例演示-将文字显示为一个圆圈
- 2.5.4 实例演示-时钟
- 3. 参考文献
1.2 turtle库-turtle库坐标系统 1.2.1 turtle库-standard坐标角度系统 1.2.2 turtle库-logo坐标角度系统专业版:turtle库是Python语言的一个第三方模块,是由1966年Wally Feurzig和Seymour Papert开发出的一种简单易用的编程语言,现在已经成为Python语言中一个很流行的绘制图像的函数库。
通俗版: turtle库,是Python用来画图的一个库,这个库里面有很多画图的命令(工具)。用turtle库画图就是去控制画笔的运动,画笔运动的轨迹就是画出来的图形。
# 切换坐标、角度系统
# mode('standard')
mode('logo')
2. turtle库-使用
2.1 turtle库-引入turtle库的三种方式
2.1.1 方式①:import turtle (直接引用)
import turtle turtle.forward(100) # 画笔向所指定方向(默认向右)前进 100 px(px即pixel,分辨率单位,代表像素)2.1.2 方式②:import turtle as t (替代式引用)
import turtle as t t.forward(100)2.1.3 方式③:from turtle import * (省略式引用)
from turtle import * forward(100)2.2 turtle库-画布与窗口
2.2.1 画布-screensize() 函数设置画布大小及背景色简单来说,screensize()函数用来设置画布的大小,setup()函数用来设置窗口的大小。而画布和窗口的关系是,窗口包含画布。
当窗口大于画布,那么画布会填充窗口。
当窗口小于画布,会出现滚动条。
一开始窗口的大小只有400px长,300px宽,默认背景色为白色,所以当我们将画布设置为800px长,400px宽的绿色画布时,我们也只能看到(400px,300px)的绿色画布,而此时会出现滚动条,即窗口小于画布,会出现滚动条。
import turtle # turtle.screensize()即画布默认值=长:400,宽:300,背景颜色:白色 turtle.screensize() turtle.done() # 停止画笔绘制,但绘图窗口不关闭 # 写出参数名称 turtle.screensize(canvwidth=800, canvheight=400, bg="green") turtle.done() # 停止画笔绘制,但绘图窗口不关闭 # 省略参数名称 turtle.screensize(800, 400, "red") turtle.done() # 停止画笔绘制,但绘图窗口不关闭2.2.2 窗口(窗体)-turtle.setup() 函数设置窗口大小及位置
因为设置完画布以后,窗口的大小是不会改变的,如果要改变只能通过setup()函数来进行设置
import turtle turtle.screensize(800,400,"blue") # 此时窗口大小仍为(400,300),画布大小变为(800,400) turtle.setup(800,400) # 此时窗口大小变为为(800,300),位于屏幕中心 turtle.done() # 停止画笔绘制,但绘图窗口不关闭
当不设置画布参数时,即认为使用默认画布,当窗口大于画布,那么画布会填充窗口。
import turtle # 宽高使用整数时 turtle.setup(800,400) # 此时窗口大小变为为(800,400),位于屏幕中心 turtle.done() # 停止画笔绘制,但绘图窗口不关闭 turtle.setup(800,400,0,0) # 此时窗口大小变为为(800,400),位于屏幕左上角 turtle.done() # 停止画笔绘制,但绘图窗口不关闭
import turtle # 宽高使用小数时 turtle.setup(1.0,1.0) # 使用默认画布设置,窗口占据整个屏幕 turtle.done() # 停止画笔绘制,但绘图窗口不关闭 turtle.setup(1.0,0.5) # 使用默认画布设置,窗口横向占据半个屏幕 turtle.done() # 停止画笔绘制,但绘图窗口不关闭2.3 turtle库-画笔参数
2.3.1 宽度-pensize()函数设置画笔的粗细在画布上,默认有一个坐标原点为画布中心的坐标轴,坐标原点上有一只面朝x轴正方向小乌龟。这里我们描述小乌龟时使用了两个词语:坐标原点(位置),面朝x轴正方向(方向), turtle绘图中,就是使用位置方向描述小乌龟(画笔)的状态。
import turtle # 导入tuetle库 # 设置画笔粗细(若未指定fan方向,画笔默认向右) turtle.pensize(10) # 画笔的尺寸为10 turtle.pensize(50) turtle.pensize(100)2.3.2 颜色-pencolor()函数设置画笔的颜色
| 关于画笔颜色和填充颜色 | 三原色值(红色值Red,绿色值 Green,蓝色值 Blue) |
|---|---|
| white:白色 | (255,255,255) |
| balck:黑色 | (0,0,0) |
| red:红色 | (255,0,0) |
| green:绿色 | (0,255,0) |
| bule:蓝色 | (0,0,255) |
| grey:灰色 | (128,128,128) |
| purple:紫色 | (255,0,255) |
| yellow:黄色 | (255,255,0) |
import turtle # 导入tuetle库
turtle.pencolor() # 画笔默认颜色为黑色
turtle.pencolor("red")
turtle.pencolor("blue")
2.3.3 移速-turtle.speed()函数设置画笔移动速度
turtle.speed(speed):设置画笔移动速度(画笔绘制的速度范围[0,10]整数,数字越大越快)
import turtle # 导入tuetle库 turtle.speed(1) # 画笔移动速度为1 turtle.speed(speed=5) turtle.speed(speed=10)2.4 turtle库-常用绘图函数 2.4.1 done()函数-停止画笔绘制,但绘图窗口不关闭
在turtle库中,done()函数的作用是停止画笔,并且阻止绘画窗口关闭,如果接下来的代码还需要用到画笔,画笔也不会再启动。
import turtle turtle.forward(100) turtle.done() turtle.left(60) turtle.forward(100)2.4.2 forward()函数-向当前画笔方向移动distance个像素长度
import turtle # 导入tuetle库 turtle.forward(distance=100) # 画笔以默认向右的方向绘制长度为100px turtle.forward(100) # 省略参数名称 turtle.done() # 停止画笔绘制,但绘图窗口不关闭2.4.3 backward()函数-向当前画笔相反方向移动distance个像素长度
import turtle turtle.backward(distance=100) turtle.backward(100) # 省略参数名称 turtle.done() # 停止画笔绘制,但绘图窗口不关闭2.4.4 right()函数-顺时针移动degree度
import turtle turtle.right(60) # 以标准坐标系为参照,箭头先方向顺时针旋转60° turtle.forward(100) # 再移动100px的长度 turtle.done() # 停止画笔绘制,但绘图窗口不关闭2.4.5 left()函数-逆时针移动degree度
import turtle turtle.left(60) # 以标准坐标系为参照,箭头先方向逆时针旋转60° turtle.forward(100) # 再移动100px的长度 turtle.done() # 停止画笔绘制,但绘图窗口不关闭2.4.6 seth()函数-绝对坐标系下偏转绝对角度
import turtle turtle.pd() turtle.seth(30) turtle.fd(100) turtle.pu() turtle.pd() turtle.seth(60) turtle.fd(100) turtle.pu() turtle.pd() turtle.seth(120) turtle.fd(100) turtle.pu() turtle.done()2.4.7 penup()函数-抬起画笔不显示移动轨迹
抬起画笔后,移动时不会绘制线条。
import turtle turtle.penup() # 抬起画笔 turtle.forward(100) turtle.done()2.4.8 pendown()函数-落下画笔显示移动轨迹
常与penup()函数成对使用,画笔落下后,移动时会再次显示移动轨迹。
简单来说先用pendown()函数落笔,画完一个图形后则用penup()函数提笔,现在已经画完了一个图形,那么我们再用pendown()函数落笔开始画第二个图形,画完第二个图形后penuo()函数提笔,依次类推。
import turtle turtle.forward(50) turtle.penup() # 抬起画笔 turtle.forward(50) turtle.pendown() # 落下画笔 turtle.forward(50) turtle.done()2.4.9 goto()函数-从原点移动轨迹到指定坐标
import turtle turtle.goto(100,200) turtle.done()2.4.10 circle(r )函数-画出半径为r的圆
圆半径为正,则圆心在画笔的左边(y正半轴) 画圆
圆半径为负,则圆心在画笔的右边(y负半轴) 画圆
import turtle turtle.pendown() turtle.circle(r=100) # 省略名称后则可以直接写turtle.circle(100) turtle.penup() turtle.pendown() turtle.circle(r=-100) turtle.penup() turtle.done()2.4.11 circle(r,extent)函数-绘制一个半径为 r,角度为extent的圆或弧形
import turtle turtle.circle(r=100,e=180) # 绘制一个半径为100,角度为180°的弧形 turtle.done()2.4.12 turtle.dot(r, e)函数-绘制一个半径为r,颜色为e的圆
import turtle turtle.hideturtle() turtle.dot(200, "yellow") # 半径为200的黄色圆 turtle.done()2.4.13 turtle.shape()函数-画笔箭头变成小乌龟
import turtle
turtle.shape("turtle")
turtle.forward(100)
turtle.done()
2.4.14 hideturtle()函数-隐藏画笔箭头
import turtle turtle.hideturtle() turtle.forward(100) turtle.done()2.4.15 showturtle()函数-显示画笔箭头
import turtle # 隐藏箭头,显示轨迹 turtle.pendown() turtle.hideturtle() turtle.forward(100) # 隐藏箭头,隐藏轨迹 turtle.penup() turtle.forward(100) # 显示箭头,显示轨迹 turtle.pendown() turtle.showturtle() turtle.forward(100) turtle.done()2.4.16 fillcolor()函数、begin_fill()函数、end_fill()函数-给绘制的图形填充颜色
import turtle
turtle.fillcolor('green') # 设置填充的颜色
turtle.begin_fill() # 开始填充颜色
for j in range(4):
turtle.forward(100)
turtle.left(90)
turtle.end_fill() # 结束填充颜色
turtle.done()
2.4.17 turtle.color(color1, color2)函数-同时设置画笔颜色、填充颜色
import turtle
turtle.color("red","blue") # 画笔颜色设置为红色,填充颜色设置为蓝色
turtle.begin_fill() # 开始填充颜色
for j in range(4):
turtle.forward(100)
turtle.left(90)
turtle.end_fill() # 结束填充颜色
turtle.done()
2.4.18 turtle.write()函数-写文字
import turtle
import turtle
turtle.write(arg="他朝若是同淋雪,此生也算共白头", move=False, align='left', font=('Arial', 16, 'normal'))
turtle.hideturtle()
turtle.done()
2.4.19 turtle.home()函数-将画笔移动到原点
# import package import turtle # set turtle speed to fastest # for bettrt understandings turtle.speed(10) # method to draw a part def fxn(): # motion turtle.circle(50, 180) turtle.right(90) turtle.circle(50, 180) # loop to draw pattern for i in range(12): fxn() # set turtle at home turtle.up() turtle.home() turtle.down() # set position turtle.left(30*(i+1)) turtle.done()2.4.20 turtle.bgcolor()函数-设置背景颜色
import turtle as t
t.bgcolor('black')
t.done()
2.5 turtle库-实例演示
2.5.1 实例演示-五色填正方形组合图案
import turtle
def drawRect():
turtle.hideturtle()
turtle.pendown()
for i in range(4):
turtle.forward(100)
turtle.left(90)
turtle.speed(10)
turtle.penup()
def main():
clrs = ['red', 'green', 'blue', 'gray', 'brown'] # 颜色列表
for i in range(10):
turtle.fillcolor(clrs[i % 5]) # 从列表中选择颜色
turtle.begin_fill() # 开始填充
drawRect()
turtle.end_fill() # 结束填充
turtle.right(36)
turtle.done()
if __name__ == '__main__':
main()
2.5.2 实例演示-五角星
# coding=utf-8
import turtle
import time
turtle.pensize(5)
turtle.pencolor("yellow")
turtle.fillcolor("red")
turtle.begin_fill()
for _ in range(5):
turtle.forward(200)
turtle.right(144)
turtle.end_fill()
time.sleep(2)
turtle.penup()
turtle.goto(-150, -120)
turtle.color("violet")
turtle.write("Done", font=('Arial', 40, 'normal'))
turtle.done()
2.5.3 实例演示-将文字显示为一个圆圈
#将文字显示为一个圆圈
import turtle
text = "醉后不知天在水,满船清梦压星河"
turtle.penup() # 可简写为pu
x = len(text)
for i in text:
turtle.write(i, font='consolas')
turtle.right(360/x) # 可简写为rt
turtle.penup()
turtle.forward(30) # 可简写为fd
turtle.hideturtle()
turtle.done()
2.5.4 实例演示-时钟
# coding=utf-8
import turtle
from datetime import *
# 抬起画笔,向前运动一段距离放下
def Skip(step):
turtle.penup()
turtle.forward(step)
turtle.pendown()
def mkHand(name, length):
# 注册Turtle形状,建立表针Turtle
turtle.reset()
Skip(-length * 0.1)
# 开始记录多边形的顶点。当前的乌龟位置是多边形的第一个顶点。
turtle.begin_poly()
turtle.forward(length * 1.1)
# 停止记录多边形的顶点。当前的乌龟位置是多边形的最后一个顶点。将与第一个顶点相连。
turtle.end_poly()
# 返回最后记录的多边形。
handForm = turtle.get_poly()
turtle.register_shape(name, handForm)
def Init():
global secHand, minHand, hurHand, printer
# 重置Turtle指向北
turtle.mode("logo")
# 建立三个表针Turtle并初始化
mkHand("secHand", 135)
mkHand("minHand", 125)
mkHand("hurHand", 90)
secHand = turtle.Turtle()
secHand.shape("secHand")
minHand = turtle.Turtle()
minHand.shape("minHand")
hurHand = turtle.Turtle()
hurHand.shape("hurHand")
for hand in secHand, minHand, hurHand:
hand.shapesize(1, 1, 3)
hand.speed(0)
# 建立输出文字Turtle
printer = turtle.Turtle()
# 隐藏画笔的turtle形状
printer.hideturtle()
printer.penup()
def SetupClock(radius):
# 建立表的外框
turtle.reset()
turtle.pensize(7)
for i in range(60):
Skip(radius)
if i % 5 == 0:
turtle.forward(20)
Skip(-radius - 20)
Skip(radius + 20)
if i == 0:
turtle.write(int(12), align="center",
font=("Courier", 14, "bold"))
elif i == 30:
Skip(25)
turtle.write(int(i/5), align="center",
font=("Courier", 14, "bold"))
Skip(-25)
elif (i == 25 or i == 35):
Skip(20)
turtle.write(int(i/5), align="center",
font=("Courier", 14, "bold"))
Skip(-20)
else:
turtle.write(int(i/5), align="center",
font=("Courier", 14, "bold"))
Skip(-radius - 20)
else:
turtle.dot(5)
Skip(-radius)
turtle.right(6)
def Week(t):
week = ["星期一", "星期二", "星期三",
"星期四", "星期五", "星期六", "星期日"]
return week[t.weekday()]
def Date(t):
y = t.year
m = t.month
d = t.day
return "%s %d%d" % (y, m, d)
def Tick():
# 绘制表针的动态显示
t = datetime.today()
second = t.second + t.microsecond * 0.000001
minute = t.minute + second / 60.0
hour = t.hour + minute / 60.0
secHand.setheading(6 * second)
minHand.setheading(6 * minute)
hurHand.setheading(30 * hour)
turtle.tracer(False)
printer.forward(65)
printer.write(Week(t), align="center",
font=("Courier", 14, "bold"))
printer.back(130)
printer.write(Date(t), align="center",
font=("Courier", 14, "bold"))
printer.home()
turtle.tracer(True)
# 100ms后继续调用tick
turtle.ontimer(Tick, 100)
def main():
# 打开/关闭龟动画,并为更新图纸设置延迟。
turtle.tracer(False)
Init()
SetupClock(160)
turtle.tracer(True)
Tick()
turtle.mainloop()
if __name__ == "__main__":
main()
3. 参考文献
《Python绘图Turtle库详解》:https://blog.csdn.net/zengxiantao1994/article/details/76588580
《Python易学就会(三)turtle绘图》:https://blog.csdn.net/weixin_34050427/article/details/88677104
《python—turtle库的基本介绍》:https://zhuanlan.zhihu.com/p/64594462
《Turtle代码功能详解一》:https://blog.csdn.net/weixin_44527588/article/details/98302740
《setup和screensize》:https://blog.csdn.net/piglite/article/details/105332460
《Python turtle.write()用法及代码示例》:https://vimsky.com/examples/usage/turtle-write-function-in-python.html
《turtle.write方法使用说明》:https://blog.csdn.net/cnds123/article/details/113915180



