表 1:turtle 库的画笔绘制状态函数(共 3 个)
函数 | 描述 |
pendown() | 放下画笔 |
penup() | 提起画笔,与 pendown()配对使用 |
pensize(width) | 设置画笔线条的粗细为指定大小 |
函数 | 描述 |
forward() | 沿着当前方向前进指定距离 |
backward() | 沿着当前相反方向后退指定距离 |
right(angle) | 向右旋转 angle 角度 |
left(angle) | 向左旋转 angle 角度 |
goto(x,y) | 移动到绝对坐标(x,y)处 |
setx( ) | 将当前 x 轴移动到指定位置 |
sety( ) | 将当前 y 轴移动到指定位置 |
setheading(angle) | 设置当前朝向为 angle 角度 |
home() | 设置当前画笔位置为原点,朝向东。 |
circle(step) | 绘制一个指定半径,角度、以及绘制步骤 step 的 |
dot(r,color) | 绘制一个指定半径 r 和颜色 color 的圆点 |
undo() | 撤销画笔最后一步动作 |
speed() | 设置画笔的绘制速度,参数为 0-10 之间 |
函数 | 描述 |
color() | 设置画笔的颜色 |
begin_fill() | 填充图形前,调用该方法 |
end_fill() | 填充图形结束 |
filling() | 返回填充的状态,True 为填充,False 为未填充 |
clear() | 清空当前窗口,但不改变当前画笔的位置 |
reset() | 清空当前窗口,并重置位置等状态为默认值 |
screensize() | 设置画布的长和宽 |
hideturtle() | 隐藏画笔的 turtle 形状 |
showturtle() | 显示画笔的 turtle 形状 |
isvisible() | 如果 turtle 可见,则返回 True |
write(str,font=None) | 输出 font 字体的字符串 |
1.绘制蟒蛇
# -*- coding: utf-8 -*-
import turtle
def drawSnake(rad,angle,len,neckrad):
for i in range(len):
turtle.circle(rad,angle)#rad画圆轨迹半径的长度
turtle.circle(-rad,angle)#angle沿着远行爬行的弧度值
turtle.circle(rad, 40)
turtle.fd(rad)#向前爬行rad
turtle.circle(neckrad+1,180)
turtle.fd(rad*2/3)
def main():
turtle.setup(1300,800,0,0)#长为1300,宽为800的窗口,(0,0)窗口左上角在屏幕中的位置
pythonsize=30#30px
turtle.pensize(pythonsize)#轨迹宽度
turtle.pencolor("blue")#轨迹颜色
turtle.seth(-40)#出发角度
drawSnake(40,80,5,pythonsize/2)
turtle.done()
main()
2.绘制五角星
# -*- coding: utf-8 -*-
from random import *
from math import *
from turtle import *
def main():
p=Turtle()
p.speed(3)
p.pensize(5)
p.pencolor("black")
p.fillcolor("yellow")
p.begin_fill()
for i in range(5):
p.forward(200)
p.right(144)
p.end_fill()
done()
main()
3.利用广度优先遍历思想画树
# -*- coding: utf-8 -*-
from random import *
from math import *
from turtle import *
def tree(plist,l,a,f):
if l>2:
nextlist=[]
for p in plist:
p.forward(l)
q=p.clone()
p.left(a)
q.right(a)
nextlist.append(p)
nextlist.append(q)
tree(nextlist,l*f,a,f)
def main():
p=Turtle()
p.color("green")
p.speed(10)
p.pensize(1)
p.left(90)
p.hideturtle()#隐藏箭头
p.penup()#抬笔
p.goto(-100,-100)
p.pendown()#落笔
tree([p],90,60,0.65)
done()
main()
4.读取文件中的数据绘图
data.txt中:直行像素,左转(0)还是右转(1),转动的角度,颜色代码
300,0,144,1,0,0
300,0,144,0,1,0
300,0,144,0,0,1
300,0,144,1,1,0
300,0,108,0,1,1
184,0,72,1,0,1
184,0,72,0,0,0
184,0,72,0,0,0
184,0,72,0,0,0
# -*- coding: utf-8 -*-
from math import *
from turtle import *
def main():
p=Turtle()
p.shape("turtle")#乌龟形状
result=[]
f=open("data.txt","r")
for line in f:
result.append(map(float,line.split(',')))#map表示将字符串类型的列表转化为float类型列表
for i in range(len(result)):
p.color(result[i][3],result[i][4],result[i][5])
p.fd(result[i][0])
if result[i][1]==0:
p.left(result[i][2])
else:
p.right(result[i][2])
done()
main()
5.创建钟表
# -*- coding: utf-8 -*-
from turtle import *
from datetime import *
def Skip(step):
penup()
forward(step)
pendown()
#建立钟表的外框
def setupClock(radius):
reset()
pensize(7)
for i in range(60):
Skip(radius)
if i%5==0:
forward(20)
Skip(-radius-20)
else:
dot(5)
Skip(-radius)
right(6)
#注册turtle形状,建立名字为name的形状
def makeHand(name,length):
reset()
Skip(-0.1*length)
# 开始记录多边形的顶点
begin_poly()
forward(1.1*length)
# 停止记录多边形的顶点,并与第一个顶点相连
end_poly()
#返回最后记录的多边形
handForm=get_poly()
#注册形状,命名为name
register_shape(name,handForm)
def init():
global secHand,minHand,hurHand,printer
#重置turtle指针向北
mode("logo")
secHand=Turtle()
makeHand("secHand", 125)
secHand.shape("secHand")
minHand=Turtle()
makeHand("minHand", 130)
minHand.shape("minHand")
hurHand=Turtle()
makeHand("hurHand", 90)
hurHand.shape("hurHand")
#shapesize第一个参数没看到什么用,第二个参数表示几倍的长度,第3个参数表示3倍的宽度
#speed(0)是最快
for hand in secHand, minHand, hurHand:
hand.shapesize(1,1,3)
hand.speed(0)
#建立并输出文字的turtle对象,printer对象只是显示文字不显示路径,所以一直是penup和hideturtle
printer=Turtle()
printer.hideturtle()
printer.penup()
def Week(t):
week=["星期一","星期二","星期三","星期四","星期五","星期六","星期七"]
return week[t.weekday()]
def Day(t):
return "%s %d %d" %(t.year,t.month,t.day)
def Tick():
t=datetime.today()
second=t.second+t.microsecond*0.000001
minute=t.minute+t.second/60.0
hour=t.hour+t.minute/60.0
secHand.setheading(second*6)
minHand.setheading(minute*6)
hurHand.setheading(hour*30)
tracer(False)
printer.fd(70)
printer.write(Week(t),align="center",font=("Courier", 14, "bold"))
printer.back(130)
printer.write(Day(t),align="center",font=("Courier", 14, "bold"))
printer.home()
tracer(True)
ontimer(Tick,100)#100ms后继续调用Tick
def main():
#关闭动画
tracer(False)
init()
setupClock(200)
#开启动画
tracer(True)
Tick()
done()
main()