专业版:turtle库是Python语言的一个第三方模块,是由1966年Wally Feurzig和Seymour Papert开发出的一种简单易用的编程语言,现在已经成为Python语言中一个很流行的绘制图像的函数库。
通俗版: turtle库,是Python用来画图的一个库,这个库里面有很多画图的命令(工具)。用turtle库画图就是去控制画笔的运动,画笔运动的轨迹就是画出来的图形。
# 切换坐标、角度系统
# mode('standard')
mode('logo')
import turtle
turtle.forward(100) # 画笔向所指定方向(默认向右)前进 100 px(px即pixel,分辨率单位,代表像素)
import turtle as t
t.forward(100)
from turtle import *
forward(100)
简单来说,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() # 停止画笔绘制,但绘图窗口不关闭
因为设置完画布以后,窗口的大小是不会改变的,如果要改变只能通过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() # 停止画笔绘制,但绘图窗口不关闭
在画布上,默认有一个坐标原点为画布中心的坐标轴,坐标原点上有一只面朝x轴正方向小乌龟。这里我们描述小乌龟时使用了两个词语:坐标原点(位置),面朝x轴正方向(方向), turtle绘图中,就是使用位置方向描述小乌龟(画笔)的状态。
import turtle # 导入tuetle库
# 设置画笔粗细(若未指定fan方向,画笔默认向右)
turtle.pensize(10) # 画笔的尺寸为10
turtle.pensize(50)
turtle.pensize(100)
关于画笔颜色和填充颜色 | 三原色值(红色值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")
turtle.speed(speed):设置画笔移动速度(画笔绘制的速度范围[0,10]整数,数字越大越快)
import turtle # 导入tuetle库
turtle.speed(1) # 画笔移动速度为1
turtle.speed(speed=5)
turtle.speed(speed=10)
在turtle库中,done()函数的作用是停止画笔,并且阻止绘画窗口关闭,如果接下来的代码还需要用到画笔,画笔也不会再启动。
import turtle
turtle.forward(100)
turtle.done()
turtle.left(60)
turtle.forward(100)
import turtle # 导入tuetle库
turtle.forward(distance=100) # 画笔以默认向右的方向绘制长度为100px
turtle.forward(100) # 省略参数名称
turtle.done() # 停止画笔绘制,但绘图窗口不关闭
import turtle
turtle.backward(distance=100)
turtle.backward(100) # 省略参数名称
turtle.done() # 停止画笔绘制,但绘图窗口不关闭
import turtle
turtle.right(60) # 以标准坐标系为参照,箭头先方向顺时针旋转60°
turtle.forward(100) # 再移动100px的长度
turtle.done() # 停止画笔绘制,但绘图窗口不关闭
import turtle
turtle.left(60) # 以标准坐标系为参照,箭头先方向逆时针旋转60°
turtle.forward(100) # 再移动100px的长度
turtle.done() # 停止画笔绘制,但绘图窗口不关闭
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()
抬起画笔后,移动时不会绘制线条。
import turtle
turtle.penup() # 抬起画笔
turtle.forward(100)
turtle.done()
常与penup()函数成对使用,画笔落下后,移动时会再次显示移动轨迹。
简单来说先用pendown()函数落笔,画完一个图形后则用penup()函数提笔,现在已经画完了一个图形,那么我们再用pendown()函数落笔开始画第二个图形,画完第二个图形后penuo()函数提笔,依次类推。
import turtle
turtle.forward(50)
turtle.penup() # 抬起画笔
turtle.forward(50)
turtle.pendown() # 落下画笔
turtle.forward(50)
turtle.done()
import turtle
turtle.goto(100,200)
turtle.done()
圆半径为正,则圆心在画笔的左边(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()
import turtle
turtle.circle(r=100,e=180) # 绘制一个半径为100,角度为180°的弧形
turtle.done()
import turtle
turtle.hideturtle()
turtle.dot(200, "yellow") # 半径为200的黄色圆
turtle.done()
import turtle
turtle.shape("turtle")
turtle.forward(100)
turtle.done()
import turtle
turtle.hideturtle()
turtle.forward(100)
turtle.done()
import turtle
# 隐藏箭头,显示轨迹
turtle.pendown()
turtle.hideturtle()
turtle.forward(100)
# 隐藏箭头,隐藏轨迹
turtle.penup()
turtle.forward(100)
# 显示箭头,显示轨迹
turtle.pendown()
turtle.showturtle()
turtle.forward(100)
turtle.done()
import turtle
turtle.fillcolor('green') # 设置填充的颜色
turtle.begin_fill() # 开始填充颜色
for j in range(4):
turtle.forward(100)
turtle.left(90)
turtle.end_fill() # 结束填充颜色
turtle.done()
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()
import turtle
import turtle
turtle.write(arg="他朝若是同淋雪,此生也算共白头", move=False, align='left', font=('Arial', 16, 'normal'))
turtle.hideturtle()
turtle.done()
# 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()
import turtle as t t.bgcolor('black') t.done()
- 1
- 2
- 3
- 4
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()
# 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()
#将文字显示为一个圆圈
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()
# 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()
《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