想学画画?python满足你!


Posted in Python onDecember 24, 2020

python中的绘图工具有不少,比如Matplotlib等等,但这些只能用来画表格,今天我们来介绍一款可以用来画画的库——turtle。

一、绘图原理

我们通过控制初始位置为(0,0)的海龟进行移动,根据一组函数指令的控制,在平面坐标系中移动,从而在它爬行的路径上绘制了图形。

二、开始绘图

turtle是python自带的库,我们直接import导入即可

import turtle

设置绘图区域属性

绘图区域背景色的设置

turtle.bgcolor('blue')

想学画画?python满足你!

选择想要的颜色即可

绘图区域大小设置

turtle.setup(width=200,height=100)

参数:

width, height: 

输入宽和高为整数时, 表示像素;

为小数时, 表示占据电脑屏幕的比例。

画笔绘制图形

让我们先简单的画一条直线

turtle.forward(100)

想学画画?python满足你!

forward()是turtle的内置函数,表示从原点向前进多少距离。我们还可以控制画笔的角度让他转弯。与之对应的是backward(),后退多少距离

turtle.backward(100)
turtle.left(60)
turtle.forward(100)

这里的left()就表示画笔的转弯方向和角度了,相应的right则为向右转。

想学画画?python满足你!

如图我们后退了100的距离然后向左偏转60°又前进了100距离。其他常用参数请参考下面的表格

画笔运动函数

函数 描述
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.speed(speed) 画笔绘制的速度范围[0,10]整数
turtle.circle() 画圆,半径为正(负),表示圆心在画笔的左边(右边)画圆

画笔参数

命令 说明
turtle.pensize(width) 绘制图形时的宽度
turtle.pencolor() 画笔颜色
turtle.fillcolor(colorstring) 绘制图形的填充颜色
turtle.color(color1, color2) 同时设置pencolor=color1, fillcolor=color2
turtle.filling() 返回当前是否在填充状态
turtle.begin_fill() 准备开始填充图形
turtle.end_fill() 填充完成;
turtle.hideturtle() 隐藏箭头显示;
turtle.showturtle() 与hideturtle()函数对应

全局控制命令

命令 说明
turtle.clear() 清空turtle窗口,但是turtle的位置和状态不会改变
turtle.reset() 清空窗口,重置turtle状态为起始状态
turtle.undo() 撤销上一个turtle动作
turtle.isvisible() 返回当前turtle是否可见
stamp() 复制当前图形
turtle.write(s[,font=("font-name",font_size,"font_type")]) 写文本,s为文本内容,font是字体的参数,里面分别为字体名称,大小和类型;font为可选项, font的参数也是可选项

三、for循环语句

如果我们要画一个正方形按照上边的方法代码为

import turtle

turtle.forward(100)
turtle.left(90)
turtle.forward(100)
turtle.left(90)
turtle.forward(100)
turtle.left(90)
turtle.forward(100)
turtle.left(90)

一个简单的四边形就要如此重复,绘制更复杂的图形还这样做的话就显得不科学了,这时候我们就要用到for循环了。使用for循环的语句优化过的代码为

totalTimes=4                       
for times in range(totalTimes):
    turtle.forward(100)
    turtle.left(90)

想学画画?python满足你!

四、简单示例

绘制五角星

import turtle

t=turtle.Pen() #获得画笔
t.hideturtle() #隐藏箭头
t.begin_fill() #填充图形
for x in range(1, 6):
    t.forward(100)
    t.left(216) #在这里先向右直行,然后左转216°(左下,正五角星度数180/5=36°)
t.end_fill() #填充完成

想学画画?python满足你!

绘制樱花树

import turtle as T
import random
import time
 
# 画樱花的躯干(60,t)
def Tree(branch, t):
  time.sleep(0.0005)
  if branch > 3:
    if 8 <= branch <= 12:
      if random.randint(0, 2) == 0:
        t.color('snow') # 白
      else:
        t.color('lightcoral') # 淡珊瑚色
      t.pensize(branch / 3)
    elif branch < 8:
      if random.randint(0, 1) == 0:
        t.color('snow')
      else:
        t.color('lightcoral') # 淡珊瑚色
      t.pensize(branch / 2)
    else:
      t.color('sienna') # 赭(zhě)色
      t.pensize(branch / 10) # 6
    t.forward(branch)
    a = 1.5 * random.random()
    t.right(20 * a)
    b = 1.5 * random.random()
    Tree(branch - 10 * b, t)
    t.left(40 * a)
    Tree(branch - 10 * b, t)
    t.right(20 * a)
    t.up()
    t.backward(branch)
    t.down()
 
# 掉落的花瓣
def Petal(m, t):
  for i in range(m):
    a = 200 - 400 * random.random()
    b = 10 - 20 * random.random()
    t.up()
    t.forward(b)
    t.left(90)
    t.forward(a)
    t.down()
    t.color('lightcoral') # 淡珊瑚色
    t.circle(1)
    t.up()
    t.backward(a)
    t.right(90)
    t.backward(b)
 
# 绘图区域
t = T.Turtle()
# 画布大小
w = T.Screen()
t.hideturtle() # 隐藏画笔
t.getscreen().tracer(5, 0)
w.screensize(bg='wheat') # wheat小麦
t.left(90)
t.up()
t.backward(150)
t.down()
t.color('sienna')
 
# 画樱花的躯干
Tree(60, t)
# 掉落的花瓣
Petal(200, t)
w.exitonclick()

想学画画?python满足你!

更多关于python的文章,欢迎关注python客栈。

想学画画?python满足你!

以上就是想学画画?python满足你!的详细内容,更多关于python 画画的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python实现的多线程端口扫描工具分享
Jan 21 Python
VScode编写第一个Python程序HelloWorld步骤
Apr 06 Python
解决Python2.7读写文件中的中文乱码问题
Apr 12 Python
朴素贝叶斯分类算法原理与Python实现与使用方法案例
Jun 26 Python
PyTorch基本数据类型(一)
May 22 Python
Python二维数组实现求出3*3矩阵对角线元素的和示例
Nov 29 Python
基于keras 模型、结构、权重保存的实现
Jan 24 Python
解决Pycharm中恢复被exclude的项目问题(pycharm source root)
Feb 14 Python
Python如何在bool函数中取值
Sep 21 Python
Python代码覆盖率统计工具coverage.py用法详解
Nov 25 Python
Python如何实现Paramiko的二次封装
Jan 30 Python
python超详细实现完整学生成绩管理系统
Mar 17 Python
Python 爬虫批量爬取网页图片保存到本地的实现代码
Dec 24 #Python
用python获取txt文件中关键字的数量
Dec 24 #Python
举例讲解Python装饰器
Dec 24 #Python
python 基于opencv操作摄像头
Dec 24 #Python
python 基于selenium实现鼠标拖拽功能
Dec 24 #Python
python实现简单猜单词游戏
Dec 24 #Python
Python 虚拟环境工作原理解析
Dec 24 #Python
You might like
PHP脚本中include文件出错解决方法
2008/11/20 PHP
php购物网站支付paypal使用方法
2010/11/28 PHP
PHP源码之explode使用说明
2011/08/05 PHP
JS是否可以跨文件同时控制多个iframe页面的应用技巧
2007/12/16 Javascript
JQuery 确定css方框模型(盒模型Box Model)
2010/01/22 Javascript
用jquery设置按钮的disabled属性的实现代码
2010/11/28 Javascript
jQuery弹性滑动导航菜单实现思路及代码
2013/05/02 Javascript
js中的for如何实现foreach中的遍历
2014/05/31 Javascript
Angularjs制作简单的路由功能demo
2015/04/14 Javascript
详解nodejs 文本操作模块-fs模块(一)
2016/12/22 NodeJs
原生js实现打字动画游戏
2017/02/04 Javascript
vue时间格式化实例代码
2017/06/13 Javascript
微信小程序自定义模态对话框实例详解
2017/08/16 Javascript
Angular 组件之间的交互的示例代码
2018/03/24 Javascript
vue使用原生js实现滚动页面跟踪导航高亮的示例代码
2018/10/25 Javascript
基于vue、react实现倒计时效果
2019/08/26 Javascript
通过vue写一个瀑布流插件代码实例
2019/09/07 Javascript
vue-cli和v-charts实现可视化图表过程解析
2019/10/08 Javascript
JS document内容及样式操作完整示例
2020/01/14 Javascript
uni-app使用微信小程序云函数的步骤示例
2020/05/22 Javascript
对于Python编程中一些重用与缩减的建议
2015/04/14 Python
使用urllib库的urlretrieve()方法下载网络文件到本地的方法
2018/12/19 Python
Django MEDIA的配置及用法详解
2019/07/25 Python
Python pip 常用命令汇总
2020/10/19 Python
详解Python Celery和RabbitMQ实战教程
2021/01/20 Python
中国跨境海淘网站:考拉海购
2016/08/01 全球购物
NFL墨西哥官方商店:Tienda NFL
2017/11/28 全球购物
通往英国高街的商店橱窗:Down Your High Street
2020/07/19 全球购物
初二物理教学反思
2014/01/29 职场文书
优秀社区干部事迹材料
2014/02/03 职场文书
暑期社会实践方案
2014/02/05 职场文书
2015年销售人员工作总结
2015/04/07 职场文书
2015年母亲节活动策划方案
2015/05/04 职场文书
我的长征观后感
2015/06/09 职场文书
PHP使用非对称加密算法RSA
2021/04/21 PHP
JavaScript获取URL参数的方法分享
2022/04/07 Javascript