一.turtle
1.操控画笔画图,turtle相当于笔头(x头?),有方向
2.https://docs.python.org/3.6/library/turtle.html
二.移动和绘制
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 import turtle 2 import time 3 4 turtle=turtle.Turtle()#创建一个实例 5 6 #设置画笔位置,强制设定画笔的移动 7 print(turtle.position())#显示当前画笔位置,相当于pos 8 tp = turtle.pos()#把当前的布局赋值给tp,不变 9 turtle.setpos(60,30)#即将画笔移动到坐标(x,y)的位置,相当于goto/setposition 10 print(turtle.pos()) 11 turtle.setpos((20,80)) 12 print(turtle.pos()) 13 turtle.setpos(tp) 14 print(turtle.pos()) 15 turtle.setx(10)#在x轴上移动画笔位置 16 turtle.sety(-10) 17 print(turtle.pos()) 18 19 #画笔前进方向和距离 20 print('#'*60) 21 print(turtle.heading())#显示画笔前进方向 22 turtle.right(45)#顺时针移动degree°,lt 23 turtle.forward(25)#向当前画笔方向移动distance像素长,fd 24 turtle.left(90)#逆时针移动degree°,rt 25 turtle.backward(45)#向当前画笔相反方向移动distance像素长度 ,相当于bk/back 26 print(turtle.heading()) 27 turtle.setheading(90)#直接设置画笔的转动角度,默认right 28 print(turtle.heading()) 29 30 turtle.home()#画笔回到初始状态 31 #方向初始为("standard"模式为right向右即东,"logo"模式是up向上即北) 32 ## “standard”模式时角度为逆时针,所以90度表示向北;logo”模式时角度为顺时针,所以90度表示向东 33 34 time.sleep(10)
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 import turtle 2 import time 3 4 turtle=turtle.Turtle() 5 6 turtle.speed(1)#设置绘图速度,由快到慢:0,10--1 7 8 turtle.circle(50)#画圆,半径为正(负),表示圆心在画笔的左边(右边)画圆 9 turtle.circle(-120,180)#半径120,角度180 10 turtle.circle(40, None, 5)#在指定半径(40)下完成(None)(默认完整360)的角度,分几(5)步画 11 turtle.dot(20, "blue")#画点,用颜色画出一个直径大小的圆点。 12 turtle.color("blue") 13 turtle.fd(100) 14 turtle.stamp()#在当前位置拷贝一份此时箭头的形状,返回一个stamp_id(int型) 15 #turtle.clearstamp(stamp_id)用来删除指定stamp_id的箭头形状 16 #turtle.clearstamps(n=None),n为None时表示删除所有拷贝的箭头形状;为0不删除;n > 0 表示删除前n个,n < 0 表示删除后n个 17 turtle.fd(200) 18 19 print(turtle.towards(0, 0))#显示箭头当前位置指向点(0,0)的角度,默认逆时针开始 20 print(round(turtle.xcor(), 5))#返回箭头的x的坐标 21 print(turtle.ycor())#返回y的坐标 22 print(turtle.distance((30, 40)))#返回当前箭头距离点(30,40)的距离 23 turtle.degrees(360)#设置角度测量单位,即设置一个完整圆的“度数” 24 turtle.radians()#将角度测量单位设置为弧度,将一个完整圆的“度数”设置成2π 25 26 turtle.undo()#撤销最后的动作 27 28 time.sleep(10) 29 --------------------------------------------- 30 38.6598082541 31 -300.0 32 -239.9999999999996 33 432.7817001676475
三.画笔控制
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 import turtle 2 import time 3 4 turtle=turtle.Turtle() 5 turtle.speed(1) 6 7 #设置画笔属性 8 turtle.pen(fillcolor="black", pencolor="red", pensize=10) 9 turtle.pensize(5)# 设置线条粗细为5 10 print(turtle.pensize())#返回线条粗细为5 11 turtle.penup()#画笔抬起,此时移动不会进行绘制操作 12 turtle.forward(100) 13 turtle.pendown()#画笔按下,此时移动会进行绘制操作 14 print(turtle.isdown())#获取画笔是否按下,按下返回True,否则返回False 15 turtle.forward(50) 16 17 #颜色控制 18 turtle.pencolor('red')# 设置或返回画笔颜色(设置后海龟箭头的外轮廓也是这个颜色) 19 #pencolor(r, g, b)设置RGB color,(r,g,b)每个都在(0,colormode),colormode颜色模式取值1.0或255 20 turtle.pencolor(0.2, 0.8, 0.55) 21 turtle.fillcolor("red")#返回或设置画笔填充颜色(设置后海龟箭头内部填充也是这个颜色) 22 turtle.fillcolor(0.1, 0.2, 0) 23 turtle.color("red", "green")#设置或返回pencolor和fillcolor 24 25 #填充, 26 #返回填充状态(填充状态则返回True,否则返回False)、开始填充图形之前先调用turtle.begin_fill()、填充完图形后调用turtle.end_fill() 27 print(turtle.filling())#返回填充状态 28 turtle.begin_fill() 29 turtle.circle(20, None, 6) 30 turtle.end_fill() 31 32 #更多绘画控制 33 screen = turtle.getscreen() 34 turtle.reset()#清屏并将画笔位置和方向恢复到初始状态,保持画笔形状不变,即位置恢复到原点(0, 0)位置 35 turtle.clear()# 清屏并且画笔形状也恢复默认,保持画笔位置和方向不变 36 turtle.write("Home = ", True, align="center")#绘制文本 37 #turtle.write(arg, move=False, align="left", font=("Arial", 8, "normal")) 38 #(待绘制的文本,设置是否绘制,设置文本下方初始位置,设置字体) 39 40 time.sleep(10)
三.绘画状态
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 import turtle 2 import time 3 4 turtle=turtle.Turtle() 5 turtle.speed(1) 6 7 #箭头可视化 8 turtle.hideturtle()#隐藏画笔(即海龟箭头), 9 turtle.showturtle()#显示画笔(即海龟箭头) 10 print(turtle.isvisible())#返回(海龟)画笔当前是否是可见状态, 11 12 #箭头外观 13 turtle.shape("turtle")#设置或返回画笔箭头形状名 14 turtle.shapesize(2,5, 12)#返回或设置画笔x/y方向拉伸值和(或)shape轮廓宽度,仅当resizemode为“user”模式时有效 15 turtle.resizemode("user")#设置或返回画笔箭头大小的缩放模式 16 #“auto”: 画笔箭头随 pensize变化而变化.“noresize”:画笔箭头大小不变 17 # “user”: 画笔箭头大小取决于【通过shapesize()进行设置的】.stretchfactor和outlinewidth (outline)的值 18 turtle.shearfactor(0.5)#设置或返回剪切因子, 19 turtle.tilt(45)#保持箭头方向不变的前提下,旋转箭头形状 20 turtle.tiltangle(90)#获取或设置(保持箭头方向不变的前提下,)旋转箭头形状的角度 21 print(turtle.shapetransform())#返回或设置箭头形状的当前变换矩阵 22 print(turtle.get_shapepoly())#返回当前多边形的坐标对,一般用来定义一个新形状或作为一个复合形状的一部分 23 24 time.sleep(10) 25 ----------------------------------------------------------- 26 True 27 (-3.6739403974420594e-16, -5.0, 2.0, 2.499999999999999) 28 ((-80.0, 39.999999999999986), (-70.0, 30.999999999999986), (-50.0, 22.999999999999993), (-35.0, 9.499999999999993), (-45.0, 8.499999999999993), (-40.0, 1.999999999999993), (-24.999999999999996, 0.49999999999999645), (-4.999999999999997, -11.5), (15.000000000000002, -17.499999999999996), (30.000000000000004, -30.999999999999993), (40.0, -31.999999999999993), (25.0, -20.499999999999996), (35.0, -17.499999999999993), (25.0, -4.4999999999999964), (40.0, -7.999999999999993), (29.999999999999996, 1.0000000000000053), (14.999999999999998, 2.5000000000000027), (-5.000000000000003, 16.5), (-25.000000000000004, 24.499999999999996), (-40.0, 37.99999999999999), (-45.0, 36.49999999999999), (-35.0, 25.499999999999993), (-50.0, 26.999999999999993), (-70.0, 38.999999999999986))
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 import turtle 2 from turtle import Turtle 3 import time 4 5 class MyTurtle(Turtle): 6 def glow(self,x,y): 7 self.fillcolor("red") 8 def unglow(self,x,y): 9 self.fillcolor("") 10 11 turtle = MyTurtle() 12 turtle.onclick(turtle.glow) # 画布上鼠标左键在当前海龟箭头位置按下时绑定一个函数 13 turtle.onrelease(turtle.unglow)#画布上鼠标左键在当前海龟箭头位置弹起时绑定一个函数 14 turtle.ondrag(turtle.goto)#画布上鼠标左键在当前海龟箭头位置按下并拖动时绑定一个函数 15 time.sleep(10)
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 import turtle 2 import time 3 4 5 turtle=turtle.Turtle() 6 turtle.speed(1) 7 8 turtle.begin_poly()#开始记录多边形第一个顶点 9 turtle.circle(40,None,3) 10 turtle.end_poly()#结束记录多边形顶点 11 p=turtle.get_poly()#获取最后记录的多边形 12 print(p) 13 clo = turtle.clone()#具有相同位置、方向和海龟箭头属性的海龟的克隆 14 print(turtle.getturtle())#返回当前海龟屏幕上第一个海龟对象本身 15 print(turtle.getscreen())#返回绘制着海龟的海龟屏幕对象,获取该对象后就可以调用海龟屏幕对象的一些方法了 16 turtle.setundobuffer(42)#设置或禁用撤销功能, size为None表示禁用撤销功能;否则设置多大,就可以通过调用undo()方法撤销多少次 17 while turtle.undobufferentries():#获取当前剩余可撤销次数, 判断是否可撤销 18 turtle.undo()## 执行撤销操作 19 20 time.sleep(10) 21 ------------------------------------------------------------- 22 ((0.00,0.00), (34.64,60.00), (-34.64,60.00), (-0.00,0.00)) 23 <turtle.Turtle object at 0x0334C4B0> 24 <turtle._Screen object at 0x0334C510>
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 import turtle 2 3 turtle=turtle.Turtle() 4 turtle.speed(1) 5 screen=turtle.getscreen()#获取海龟屏幕 6 7 #窗口控制 8 screen.bgcolor('red')# 设置或返回海龟屏幕TurtleScreen的背景色 9 screen.bgpic('image.PNG')# 设置/删除背景图片或返回当前的背景图片名 10 screen.screensize(200,100)#返回或设置画布大小 11 screen.setworldcoordinates(-50, -7.5, 50, 7.5)#设置用户自定义的坐标系统 12 #画布左下角x坐标,左下角y坐标,右上角x坐标,右上角y坐标, 13 # 如果必要的话需要切换到“world”模式,如果“world”模式已经是活动的,则会根据新的坐标重绘图纸。 14 screen.reset()#重新设置屏幕 15 # screen.clear()#清空屏幕 16 17 #动画控制 18 screen.delay(5)#设置或返回绘图延迟(单位:毫秒),绘图延迟越长,动画的速度越慢 19 screen.tracer(8, 25)# 打开或关闭海龟动画,并设置绘制延迟 20 screen.update()# 更新海龟屏幕TurtleScreen对象,tracer关闭时使用 21 22 #使用屏幕事件 23 def f(): 24 turtle.fd(50) 25 turtle.lt(60) 26 screen.onkey(f, "Up")#键盘上key键key-release事件触发时(即按下并抬起)绑定一个无参函数 27 screen.listen()# 为了收集关键事件,让海龟屏幕TurtleScreen的对象获取焦点 28 screen.onkeypress(f, None)#键盘上key键按下时即key-press事件触发时绑定一个无参函数 29 def turn(x, y): 30 turtle.lt(90) 31 screen.onclick(turn)# 画布上鼠标左键在按下时绑定一个函数 32 screen.ontimer(f, 250)#开启一个计时器,t毫秒后调用函数fun 33 screen.clear() 34 35 #输入相关方法 36 screen.textinput("欢迎框", "你的姓名是")# 弹出一个输入文本的弹出框, 37 screen.numinput("身高", "请输入您的身高(单位:米)", 0, 0, 2.5)# 弹出一个输入数字的弹出框 38 39 #设置以及特殊方法 40 screen.mode(mode=None)#设置或返回海龟模式,默认是"standard"标准模式 41 #"standard"向右(东),逆时针方向;"world" 向右(东),逆时针;"logo"向上(北)顺时针方向 42 screen.colormode(cmode=None) # 返回或设置colormode的值为1.0或255 43 screen.getcanvas()# 返回海龟屏幕TurtleScreen的画布对象实例 44 print(screen.getshapes())# 获取当前可用海龟形状的名称列表 45 # screen.register_shape("turtle.gif")# 内存中添加注册海龟图形 46 print(screen.turtles())# 返回海龟屏幕TurtleScreen中所有的海龟箭头对象列表 47 print(screen.window_height())# 返回海龟绘图窗口的高/宽 48 print(screen.window_width())# 返回海龟绘图窗口的宽 49 50 #屏幕特殊方法 51 screen.setup(width=576, height=100, startx=0, starty=0)# 设置默认展现的主窗口的大小和位置 52 screen.title("hello turtle")# 设置海龟窗口标题 53 # screen.bye()# 关闭海龟图形窗口 54 screen.exitonclick()# 运行后屏幕自动消失,调用这句后屏幕会保持,直到点击屏幕才会关闭海龟图形窗口 55 # screen.mainloop()#告诉窗口等待用户操作,窗口不自动关闭 56 57 -------------------------------------------------------- 58 ['arrow', 'blank', 'circle', 'classic', 'square', 'triangle', 'turtle'] 59 [] 60 810 61 960
总结
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 import turtle 2 3 turtle=turtle.Turtle()#创建Turtle实例 4 screen=turtle.getscreen()#获取屏幕 5 6 #设置屏幕属性(长宽,颜色) 7 screen.screensize(800,600,'black') 8 screen.delay(10)#设置绘图延迟 9 10 #设置画笔及箭头 11 turtle.pen(pencolor='red',#画笔颜色 12 pensize=5,#线条粗细 13 speed=1,#绘画速度 14 shown=True,#是否显示 15 fillcolor='blue',#填充色 16 ) 17 turtle.shape('turtle')#箭头形状 18 turtle.penup()#提起画笔 19 turtle.goto(100,100)#移动画笔 20 turtle.pendown()#放下画笔 21 22 #绘图 23 #移动(方向和距离) 24 turtle.forward(100) 25 turtle.left(90) 26 turtle.backward(100) 27 turtle.right(90) 28 29 #填充图形 30 turtle.begin_fill()#开始填充 31 for i in range(4): 32 turtle.forward(100) 33 turtle.right(90) 34 turtle.end_fill()#结束填充 35 36 #画点和圆 37 turtle.dot(20,'green') 38 turtle.circle(40, None) 39 turtle.circle(90,180, 5) 40 turtle.write("title",align="center", #绘制文本 41 font=("Arial", 20, "normal"))#(文本,位置,字体) 42 43 #多边形 44 turtle.begin_poly()#开始记录多边形第一个顶点 45 turtle.circle(40,None,3) 46 turtle.end_poly()#结束记录多边形顶点 47 p=turtle.get_poly()#获取最后记录的多边形 48 print(p) 49 50 turtle.undo()#撤销上一个turtle动作 51 # turtle.home()#画笔重置,从当前位置移动到初始位置 52 turtle.clear()#清空turtle窗口,但是turtle的位置和状态不会改变 53 # turtle.reset()#清空窗口,重置turtle状态为起始状态 54 screen.mainloop()#窗口不自动关闭 55 ---------------------------------------------------- 56 ((200.00,180.00), (165.36,120.00), (234.64,120.00), (200.00,180.00))
例:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 import turtle 2 3 star = turtle.Turtle() 4 5 for i in range(5): 6 star.forward(50) 7 star.right(144) 8 9 turtle.done()
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 import turtle 2 3 spiral = turtle.Turtle() 4 5 for i in range(20): 6 spiral.forward(i * 10) 7 spiral.right(144) 8 9 turtle.done()
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 import turtle 2 3 ninja = turtle.Turtle() 4 5 ninja.speed(10) 6 7 for i in range(180): 8 ninja.forward(100) 9 ninja.right(30) 10 ninja.forward(20) 11 ninja.left(60) 12 ninja.forward(50) 13 ninja.right(30) 14 15 ninja.penup() 16 ninja.setposition(0, 0) 17 ninja.pendown() 18 19 ninja.right(2) 20 21 turtle.done()
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 import turtle 2 3 turtle=turtle.Turtle() 4 screen=turtle.getscreen() 5 6 turtle.color('red', 'yellow') 7 turtle.begin_fill() 8 for i in range(50): 9 turtle.forward(200) 10 turtle.left(170) 11 turtle.end_fill() 12 screen.mainloop()