想学画画?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编写一个国际象棋AI程序
Nov 28 Python
举例讲解Python面相对象编程中对象的属性与类的方法
Jan 19 Python
python装饰器与递归算法详解
Feb 18 Python
Python读csv文件去掉一列后再写入新的文件实例
Dec 28 Python
python统计多维数组的行数和列数实例
Jun 23 Python
python计算两个数的百分比方法
Jun 29 Python
Python日志模块logging基本用法分析
Aug 23 Python
使用Selenium破解新浪微博的四宫格验证码
Oct 19 Python
python+opencv打开摄像头,保存视频、拍照功能的实现方法
Jan 08 Python
python super的使用方法及实例详解
Sep 25 Python
Python多线程:主线程等待所有子线程结束代码
Apr 25 Python
Python使用urlretrieve实现直接远程下载图片的示例代码
Aug 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实现的在线人员函数库
2008/04/09 PHP
PHP中使用SimpleXML检查XML文件结构实例
2015/01/07 PHP
PHP获取数组的键与值方法小结
2015/06/13 PHP
Windows下wamp php单元测试工具PHPUnit安装及生成日志文件配置方法
2018/05/28 PHP
PHP实现的服务器一致性hash分布算法示例
2018/08/09 PHP
thinkPHP框架中layer.js的封装与使用方法示例
2019/01/18 PHP
基于jquery的设置页面文本框 只能输入数字的实现代码
2011/04/19 Javascript
Js和JQuery获取鼠标指针坐标的实现代码分享
2015/05/25 Javascript
jQuery实现鼠标划过添加和删除class的方法
2015/06/26 Javascript
js判断当前页面在移动设备还是在PC端中打开
2016/01/06 Javascript
jQuery隐藏和显示效果实现
2016/04/06 Javascript
Bootstrap模态对话框的简单使用
2016/04/29 Javascript
jQuery html表格排序插件tablesorter使用方法详解
2017/02/10 Javascript
原生js封装添加class,删除class的实例
2017/11/06 Javascript
vue渲染时闪烁{{}}的问题及解决方法
2018/03/28 Javascript
JS实现图片轮播效果实例详解【可自动和手动】
2019/04/04 Javascript
Vue.js@2.6.10更新内置错误处机制Fundebug同步支持相应错误监控
2019/05/13 Javascript
js数据类型转换与流程控制操作实例分析
2019/12/18 Javascript
详解Vue中的MVVM原理和实现方法
2020/07/15 Javascript
Python文件夹与文件的操作实现代码
2014/07/13 Python
Python入门篇之面向对象
2014/10/20 Python
使用Python编写提取日志中的中文的脚本的方法
2015/04/30 Python
python去除字符串中的换行符
2017/10/11 Python
对numpy中shape的深入理解
2018/06/15 Python
Python opencv实现人眼/人脸识别以及实时打码处理
2019/04/29 Python
python解析xml简单示例
2019/06/21 Python
浅谈利用缓存来优化HTML5 Canvas程序的性能
2015/05/12 HTML / CSS
极简的HTML5模版
2015/07/09 HTML / CSS
利用Storage Event实现页面间通信的示例代码
2018/07/26 HTML / CSS
请用Java实现列出某个目录下的所有文件
2013/09/23 面试题
opencv实现图像几何变换
2021/03/24 Python
工地安全生产标语
2014/06/06 职场文书
银行给客户的感谢信
2015/01/23 职场文书
大队委员竞选稿
2015/11/20 职场文书
大队委员竞选演讲稿
2015/11/20 职场文书
MySQL 数据库 增删查改、克隆、外键 等操作
2022/05/11 MySQL