文章目录
- 1、简介
- 2、接口说明
- 2.1 海龟动作
-
- 2.2 画笔控制
- 2.2.1 绘图状态
- 2.2.2 颜色控制
- 2.2.3 填充
- 2.2.4 更多绘图控制
- 2.3 TurtleScreen/Screen 方法
- 2.3.1 窗口控制
- 2.3.2 使用屏幕事件
- 2.3.3 Screen 专有方法
- 3、示例测试
- 3.1 Turtle star
- 3.2 分形树
- 3.3 打气球
- 3.4 turtledemo --- 演示脚本集
- 结语
1、简介
海龟绘图很适合用来引导孩子学习编程。 最初来自于 Wally Feurzeig, Seymour Papert 和 Cynthia Solomon 于 1967 年所创造的 Logo 编程语言。
turtle 模块提供面向对象和面向过程两种形式的海龟绘图基本组件。由于它使用 tkinter 实现基本图形界面,因此需要安装了 Tk 支持的 Python 版本。
- (1)面向对象接口
主要使用“2+2”个类:
TurtleScreen/Screen 的所有方法还存在对应的函数,即作为面向过程的接口组成部分。
RawTurtle/Turtle 的所有方法也存在对应的函数,即作为面向过程的接口组成部分。 - (2)过程式接口
过程式接口提供与 Screen 和 Turtle 类的方法相对应的函数。函数名与对应的方法名相同。当 Screen 类的方法对应函数被调用时会自动创建一个 Screen 对象。当 Turtle 类的方法对应函数被调用时会自动创建一个 (匿名的) Turtle 对象。
如果屏幕上需要有多个海龟,就必须使用面向对象的接口。
2、接口说明
2.1 海龟动作
2.1.1 移动和绘制
命令 | 说明 |
---|
forward() 、 fd() | 前进 |
backward() 、 bk() 、 back() | 后退 |
right() 、 rt() | 右转 |
left() 、 lt() | 左转 |
goto() 、 setpos() 、 setposition() | 前往/定位 |
setx() | 设置x坐标 |
sety() | 设置y坐标 |
setheading()、 seth() | 设置朝向 |
home() | 返回原点 |
circle() | 画圆 |
dot() | 画点 |
stamp() | 印章 |
clearstamp() | 清除印章 |
clearstamps() | 清除多个印章 |
undo() | 撤消 |
speed() | 速度 |
2.1.2 获取海龟的状态
命令 | 说明 |
---|
position() 、 pos() | 位置 |
towards() | 目标方向 |
xcor() | x坐标 |
ycor() | y坐标 |
heading() | 朝向 |
distance() | 距离 |
2.2 画笔控制
2.2.1 绘图状态
命令 | 说明 |
---|
pendown() 、 pd() 、 down() | 画笔落下 |
penup() 、 pu() 、 up() | 画笔抬起 |
pensize() 、 width() | 画笔粗细 |
pen() | 画笔 |
isdown() | 画笔是否落下 |
2.2.2 颜色控制
命令 | 说明 |
---|
color() | 颜色 |
pencolor() | 画笔颜色 |
fillcolor() | 填充颜色 |
2.2.3 填充
命令 | 说明 |
---|
filling() | 是否填充 |
begin_fill() | 开始填充 |
end_fill() | 结束填充 |
2.2.4 更多绘图控制
命令 | 说明 |
---|
reset() | 重置 |
clear() | 清空 |
write() | 书写 |
2.3 TurtleScreen/Screen 方法
2.3.1 窗口控制
命令 | 说明 |
---|
bgcolor() | 背景颜色 |
bgpic() | 背景图片 |
clearscreen() | 清空 |
resetscreen() | 重置 |
screensize() | 屏幕大小 |
setworldcoordinates() | 设置世界坐标系 |
2.3.2 使用屏幕事件
命令 | 说明 |
---|
listen() 监听 | |
onkey() 、onkeyrelease() | 当键盘按下并释放 |
onkeypress() | 当键盘按下 |
onclick() 、 onscreenclick() | 当点击屏幕 |
ontimer() | 当达到定时 |
mainloop() 、 done() | 主循环 |
2.3.3 Screen 专有方法
命令 | 说明 |
---|
bye() | 退出 |
exitonclick() | 当点击时退出 |
setup() | 设置 |
title() | 标题 |
3、示例测试
3.1 Turtle star
from turtle import *
title('turtle绘图 - 爱看书的小沐')
color('red', 'yellow')
speed(10)
begin_fill()
while True:
forward(200)
left(170)
if abs(pos()) < 1:
break
end_fill()
done()
或
import turtle as t
t.color("red", "yellow")
t.speed(10)
t.begin_fill()
for _ in range(50):
t.forward(200)
t.left(170)
t.end_fill()
t.done()
3.2 分形树
import turtle
toplevel = 8
angle = 30
rangle = 15
def drawTree(length, level):
turtle.left(angle)
turtle.color("black")
turtle.forward(length)
if level == toplevel:
turtle.color("pink")
turtle.circle(2, 360)
if level < toplevel:
drawTree(length - 10, level + 1)
turtle.back(length)
turtle.right(angle + rangle)
turtle.color("black")
turtle.forward(length)
if level == toplevel:
turtle.color("pink")
turtle.circle(2, 360)
if level < toplevel:
drawTree(length - 10, level + 1)
turtle.color("black")
turtle.back(length)
turtle.left(rangle)
def writePoem():
turtle.color("blue")
turtle.penup()
turtle.goto(150, -120)
turtle.write('碧玉妆成一树高,',font=("隶书", 15))
turtle.goto(150, -140)
turtle.write('万条垂下绿丝绦。',font=("隶书", 15))
turtle.goto(150, -160)
turtle.write('不知细叶谁裁出,',font=("隶书", 15))
turtle.goto(150, -180)
turtle.write('二月春风似剪刀。',font=("隶书", 15))
turtle.hideturtle()
turtle.left(90)
turtle.penup()
turtle.back(300)
turtle.pendown()
turtle.forward(100)
turtle.speed(11)
drawTree(80, 1)
writePoem()
turtle.done()
3.3 打气球
from turtle import *
from random import randrange,choice
balloons=[]
color_option=["red","blue","green","purple","pink","yellow","orange","black"]
size=50
def line(x,y,a,b,line_width=1,color_name="black"):
up()
goto(x,y)
down()
color(color_name)
width(line_width)
goto(a,b)
def distance(x,y,a,b):
return ((a-x)**2+(b-y)**2)**0.5
def tap(x,y):
for i in range(len(balloons)):
if distance(x,y,balloons[i][0],balloons[i][1])<(size/2):
balloons.pop(i)
return
def draw():
clear()
for i in range(1,(len(balloons)+1)):
line(balloons[-i][0],balloons[-i][1],balloons[-i][0],balloons[-i][1]-size*1.5,1)
up()
goto(balloons[-i][0],balloons[-i][1])
dot(size,balloons[-i][2])
balloons[-i][1]=balloons[-i][1]+1
update()
def gameLoop():
if randrange(0,50)==1:
x=randrange(-200+size,200-size)
c=choice(color_option)
balloons.append([x,-200-size,c])
draw()
ontimer(gameLoop,10)
if __name__ == "__main__":
setup(600, 350, 0, 0)
bgpic(r'C:\Users\tomcat\desktop\20220919041856.png')
hideturtle()
tracer(False)
listen()
onscreenclick(tap)
gameLoop()
done()
3.4 turtledemo — 演示脚本集
turtledemo 包汇集了一组演示脚本。这些脚本可以通过以下命令打开所提供的演示查看器运行和查看:
python -m turtledemo
python -m turtledemo.bytedesign
结语
如果您觉得该方法或代码有一点点用处,可以给作者点个赞,或打赏杯咖啡;
╮( ̄▽ ̄)╭
如果您感觉方法或代码不咋地
//(ㄒoㄒ)//,就在评论处留言,作者继续改进;
o_O???
如果您需要相关功能的代码定制化开发,可以留言私信作者;
(✿◡‿◡)
感谢各位大佬童鞋们的支持!
( ´ ▽´ )ノ ( ´ ▽´)っ!!!