Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x、纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行的路径上绘制了图形。

在1966年,Seymour Papert和Wally Feurzig发明了一种专门给儿童学习编程的语言——LOGO语言,它的特色就是通过编程指挥一个小海龟(turtle)在屏幕上绘图。海龟绘图(Turtle Graphics)后来被移植到各种高级语言中,Python内置了turtle库,基本上100%复制了原始的Turtle Graphics的所有功能。

使用之前需要导入库:

from turtle import *

画笔运动命令

命令

说明

turtle.forward(distance)

向当前画笔方向移动distance像素长度

turtle.backward(distance)

向当前画笔相反方向移动distance像素长度

turtle.right(degree)

顺时针移动degree°

turtle.left(degree)

逆时针移动degree°

turtle.pendown()

移动时绘制图形,缺省时也为绘制

turtle.goto(x,y)

将画笔移动到坐标为x,y的位置

turtle.penup()

提起笔移动,不绘制图形,用于另起一个地方绘制

turtle.circle()

画圆,半径为正(负),表示圆心在画笔的左边(右边)画圆

setx( )

将当前x轴移动到指定位置

sety( )

将当前y轴移动到指定位置

setheading(angle)

设置当前朝向为angle角度

home()

设置当前画笔位置为原点,朝向东。

dot(r)

绘制一个指定直径和颜色的圆点

画笔控制命令

命令

说明

turtle.fillcolor(colorstring)

绘制图形的填充颜色

turtle.color(color1, color2)

同时设置pencolor=color1, fillcolor=color2

turtle.filling()

返回当前是否在填充状态

turtle.begin_fill()

准备开始填充图形

turtle.end_fill()

填充完成

turtle.hideturtle()

隐藏画笔的turtle形状

turtle.showturtle()

显示画笔的turtle形状

如,画一个长方形:

  1. # 导入turtle包的所有内容:
  2. from turtle import *
  3.  
  4. # 设置笔刷宽度:
  5. width(4)
  6.  
  7. # 前进:
  8. forward(200)
  9. # 右转90度:
  10. right(90)
  11.  
  12. # 笔刷颜色:
  13. pencolor('red')
  14. forward(100)
  15. right(90)
  16.  
  17. pencolor('green')
  18. forward(200)
  19. right(90)
  20.  
  21. pencolor('blue')
  22. forward(100)
  23. right(90)
  24.  
  25. # 调用done()使得窗口等待被关闭,否则将立刻关闭窗口:
  26. done()

  

更多操作请参考turtle库的说明。https://docs.python.org/3.6/library/frameworks.html

五角星:

  1. from turtle import *
  2. for i in range(5):
  3. fd(200)
  4. rt(144)
  5. done()

  

填充颜色

  1. from turtle import *
  2. width(4)
  3. pencolor("yellow")
  4. fillcolor("red")
  5.  
  6. begin_fill()
  7. for i in range(5):
  8. fd(200)
  9. rt(144)
  10. end_fill()
  11. done()

  

太阳花:

  1. from turtle import *
  2.  
  3. color('red', 'yellow')
  4.  
  5. begin_fill()
  6.  
  7. while True:
  8. forward(200)
  9. left(170)
  10. if abs(pos()) < 1:
  11. break
  12.  
  13. end_fill()
  14.  
  15. done()

  

太极图:

  1. from turtle import *
  2.  
  3. circle(100,180)
  4. circle(200,180)
  5. circle(100,-180)
  6.  
  7. fillcolor('black')
  8.  
  9. begin_fill()
  10.  
  11. circle(100,180)
  12. circle(200,180)
  13. circle(100,-180)
  14.  
  15. end_fill()
  16.  
  17. penup()
  18.  
  19. goto(0,100)
  20. dot(50)
  21. goto(0,-100)
  22. pencolor('white')
  23. dot(50)
  24.  
  25. hideturtle()
  26.  
  27. done()

  

利用循环嵌套方法画图:

  1. from turtle import *
  2.  
  3. for i in range(6):
  4. pendown()
  5. fd(150)
  6.  
  7. for j in range(10):
  8. circle(40)
  9. lt(36)
  10. lt(60)
  11. penup()
    goto(0,0)
  12. done()

  

画一个笑脸

  1. from turtle import *
  2. def go(x,y):
  3. penup()
  4. goto(x,y)
  5. pendown()
  6. def arc(radius):
  7. circle(radius,90)
  8. reset()
  9. speed(0)
  10. go(0,-150)
  11. circle(200)
  12. go(50,100)
  13. seth(225)
  14. arc(10)
  15. arc(50)
  16. arc(10)
  17. arc(50)
  18. go(-50,100)
  19. seth(-45)
  20. arc(-10)
  21. arc(-50)
  22. arc(-10)
  23. arc(-50)
  24. go(-70,-50)
  25. arc(100)
  26. hideturtle()

  

绘制一棵分型树:

  1. from turtle import *
  2.  
  3. # 设置色彩模式是RGB:
  4. colormode(255)
  5.  
  6. lt(90)
  7. lv = 14
  8. l = 120
  9. s = 45
  10.  
  11. width(lv)
  12.  
  13. # 初始化RGB颜色:
  14. r = 0
  15. g = 0
  16. b = 0
  17. pencolor(r, g, b)
  18.  
  19. penup()
  20. bk(l)
  21. pendown()
  22. fd(l)
  23.  
  24. def draw_tree(l, level):
  25. global r, g, b
  26. # save the current pen width
  27. w = width()
  28.  
  29. # narrow the pen width
  30. width(w * 3.0 / 4.0)
  31. # set color:
  32. r = r + 1
  33. g = g + 2
  34. b = b + 3
  35. pencolor(r % 200, g % 200, b % 200)
  36.  
  37. l = 3.0 / 4.0 * l
  38.  
  39. lt(s)
  40. fd(l)
  41.  
  42. if level < lv:
  43. draw_tree(l, level + 1)
  44. bk(l)
  45. rt(2 * s)
  46. fd(l)
  47.  
  48. if level < lv:
  49. draw_tree(l, level + 1)
  50. bk(l)
  51. lt(s)
  52.  
  53. # restore the previous pen width
  54. width(w)
  55.  
  56. speed("fastest")
  57.  
  58. draw_tree(l, 4)
  59.  
  60. done()

  

螺旋图:

  1. from turtle import *
  2. for i in range(100):
  3. fd(2*i)
  4. lt(90)
  5. done()

  

  1. from turtle import *
  2.  
  3. speed(10)
  4.  
  5. for i in range(200):
  6. fd(2*i)
  7. lt(92)
  8. done()

小白学Python(20)—— Turtle 海龟绘图的更多相关文章

  1. 小白学 Python 数据分析(20):pyecharts 概述

    人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...

  2. 小白学 Python(20):迭代器基础

    人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...

  3. 小白学 Python 爬虫(20):Xpath 进阶

    人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...

  4. 小白学 Python(24):Excel 基础操作(下)

    人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...

  5. 小白学 Python(5):基础运算符(上)

    人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...

  6. 小白学 Python(6):基础运算符(下)

    人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...

  7. 小白学 Python(9):基础数据结构(列表)(上)

    人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...

  8. 小白学 Python(21):生成器基础

    人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...

  9. 小白学 Python(22):time 和 calendar 模块简单使用

    人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...

  10. 小白学 Python(23):Excel 基础操作(上)

    人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...

随机推荐

  1. python-套接字编程之udp

    使用udp协议 服务端: #!/usr/bin/python3 # coding:utf-8 # Auther:AlphaPanda # Description:UDP服务端 # Version:1 ...

  2. Jenkins-ssh远程执行nohup- java无法退出

    一,初步 #执行方式 ssh 192.168.2.103 " nohup java -jar /home/a/ipf/ight/feedback/ixxxedback-platform-1. ...

  3. 容器内安装nvidia,cuda,cudnn

    /var/lib/docker/overlay2 占用很大,清理Docker占用的磁盘空间,迁移 /var/lib/docker 目录 du -hs /var/lib/docker/ 命令查看磁盘使用 ...

  4. python图片转字符画(转)

    先上代码: from PIL import Image import argparse #命令行输入参数处理 parser = argparse.ArgumentParser() parser.add ...

  5. BZOJ 3294: [Cqoi2011]放棋子 计数 + 容斥 + 组合

    比较头疼的计数题. 我们发现,放置一个棋子会使得该棋子所在的1个行和1个列都只能放同种棋子. 定义状态 $f_{i,j,k}$ 表示目前已使用了 $i$ 个行,$j$ 个列,并放置了前 $k$ 种棋子 ...

  6. Min_25筛初级应用:求$[1,n]$内质数个数

    代码 #include <bits/stdc++.h> #define rin(i,a,b) for(int i=(a);i<=(b);++i) #define irin(i,a,b ...

  7. Vue学习(二) :第一个Vue项目

    OS: Windows 10 Home 64bit Chocolatey version: 0.10.13 npm version: 6.4.1 yarn version: 1.16.0 git ve ...

  8. ubuntu16虚拟机迁移/移动/复制后无法上网

    修改grub配置 如果没有网卡,需要配置 sudo vi /etc/default/grub 将 GRUB_CMDLINE_LINUX="" 修改为 GRUB_CMDLINE_LI ...

  9. 浅谈call apply bind的区别

    这三个方法的用法非常相似,将函数绑定到上下文中,即用来改变函数中this的指向.举个例子: var zlw = { name: "zlw", sayHello: function ...

  10. 阶段3 1.Mybatis_02.Mybatis入门案例_2.mybatis入门案例中的设计模式分析

    读取配合文件 创建工厂 最终图