文章目录
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??? 如果您需要相关功能的代码定制化开发,可以留言私信作者;
(✿◡‿◡) 感谢各位大佬童鞋们的支持!
( ´ ▽´ )ノ ( ´ ▽´)っ!!!