python里自带的绘画库是_Python绘图Turtle库详解

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

turtle绘图的基础知识:

1. 画布(canvas)

画布就是turtle为我们展开用于绘图区域,我们可以设置它的大小和初始位置。

设置画布大小

turtle.screensize(canvwidth=None, canvheight=None, bg=None),参数分别为画布的宽(单位像素), 高, 背景颜色。

如:turtle.screensize(800,600, "green")

turtle.screensize() #返回默认大小(400, 300)

turtle.setup(width=0.5, height=0.75, startx=None, starty=None),参数:width, height: 输入宽和高为整数时, 表示像素; 为小数时, 表示占据电脑屏幕的比例,(startx, starty): 这一坐标表示矩形窗口左上角顶点的位置, 如果为空,则窗口位于屏幕中心。

如:turtle.setup(width=0.6,height=0.6)

turtle.setup(width=800,height=800, startx=100, starty=100)

2. 画笔

2.1 画笔的状态

在画布上,默认有一个坐标原点为画布中心的坐标轴,坐标原点上有一只面朝x轴正方向小乌龟。这里我们描述小乌龟时使用了两个词语:坐标原点(位置),面朝x轴正方向(方向), turtle绘图中,就是使用位置方向描述小乌龟(画笔)的状态。

2.2 画笔的属性

画笔(画笔的属性,颜色、画线的宽度等)

1) turtle.pensize():设置画笔的宽度;

2) turtle.pencolor():没有参数传入,返回当前画笔颜色,传入参数设置画笔颜色,可以是字符串如"green", "red",也可以是RGB 3元组。

3) turtle.speed(speed):设置画笔移动速度,画笔绘制的速度范围[0,10]整数,数字越大越快。

2.3 绘图命令

操纵海龟绘图有着许多的命令,这些命令可以划分为3种:一种为运动命令,一种为画笔控制命令,还有一种是全局控制命令。

(1) 画笔运动命令

命令 说明

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) 绘制一个指定直径和颜色的圆点

(2) 画笔控制命令

命令 说明

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形状

(3) 全局控制命令

命令 说明

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参数也是可选项

(4) 其他命令

3. 命令详解

3.1 turtle.circle(radius, extent=None, steps=None)

描述:以给定半径画圆

参数:

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

extent(弧度) (optional);

steps (optional) (做半径为radius的圆的内切正多边形,多边形边数为steps)。

举例:

circle(50) # 整圆;

circle(50,steps=3) # 三角形;

circle(120, 180) # 半圆

实例:

1、太阳花

# coding=utf-8

import turtle

import time

# 同时设置pencolor=color1, fillcolor=color2

turtle.color("red", "yellow")

turtle.begin_fill()

for _ in range(50):

turtle.forward(200)

turtle.left(170)

turtle.end_fill()

turtle.mainloop()

2、五角星

# coding=utf-8

import turtle

import time

turtle.pensize(5)

turtle.pencolor("yellow")

turtle.fillcolor("red")

turtle.begin_fill()

for _ in range(5):

turtle.forward(200)

turtle.right(144)

turtle.end_fill()

time.sleep(2)

turtle.penup()

turtle.goto(-150,-120)

turtle.color("violet")

turtle.write("Done", font=('Arial', 40, 'normal'))

turtle.mainloop()

3、时钟程序

# coding=utf-8

import turtle

from datetime import *

# 抬起画笔,向前运动一段距离放下

def Skip(step):

turtle.penup()

turtle.forward(step)

turtle.pendown()

def mkHand(name, length):

# 注册Turtle形状,建立表针Turtle

turtle.reset()

Skip(-length * 0.1)

# 开始记录多边形的顶点。当前的乌龟位置是多边形的第一个顶点。

turtle.begin_poly()

turtle.forward(length * 1.1)

# 停止记录多边形的顶点。当前的乌龟位置是多边形的最后一个顶点。将与第一个顶点相连。

turtle.end_poly()

# 返回最后记录的多边形。

handForm = turtle.get_poly()

turtle.register_shape(name, handForm)

def Init():

global secHand, minHand, hurHand, printer

# 重置Turtle指向北

turtle.mode("logo")

# 建立三个表针Turtle并初始化

mkHand("secHand", 135)

mkHand("minHand", 125)

mkHand("hurHand", 90)

secHand = turtle.Turtle()

secHand.shape("secHand")

minHand = turtle.Turtle()

minHand.shape("minHand")

hurHand = turtle.Turtle()

hurHand.shape("hurHand")

for hand in secHand, minHand, hurHand:

hand.shapesize(1, 1, 3)

hand.speed(0)

# 建立输出文字Turtle

printer = turtle.Turtle()

# 隐藏画笔的turtle形状

printer.hideturtle()

printer.penup()

def SetupClock(radius):

# 建立表的外框

turtle.reset()

turtle.pensize(7)

for i in range(60):

Skip(radius)

if i % 5 == 0:

turtle.forward(20)

Skip(-radius - 20)

Skip(radius + 20)

if i == 0:

turtle.write(int(12), align="center", font=("Courier", 14, "bold"))

elif i == 30:

Skip(25)

turtle.write(int(i/5), align="center", font=("Courier", 14, "bold"))

Skip(-25)

elif (i == 25 or i == 35):

Skip(20)

turtle.write(int(i/5), align="center", font=("Courier", 14, "bold"))

Skip(-20)

else:

turtle.write(int(i/5), align="center", font=("Courier", 14, "bold"))

Skip(-radius - 20)

else:

turtle.dot(5)

Skip(-radius)

turtle.right(6)

def Week(t):

week = ["星期一", "星期二", "星期三",

"星期四", "星期五", "星期六", "星期日"]

return week[t.weekday()]

def Date(t):

y = t.year

m = t.month

d = t.day

return "%s %d%d" % (y, m, d)

def Tick():

# 绘制表针的动态显示

t = datetime.today()

second = t.second + t.microsecond * 0.000001

minute = t.minute + second / 60.0

hour = t.hour + minute / 60.0

secHand.setheading(6 * second)

minHand.setheading(6 * minute)

hurHand.setheading(30 * hour)

turtle.tracer(False)

printer.forward(65)

printer.write(Week(t), align="center",

font=("Courier", 14, "bold"))

printer.back(130)

printer.write(Date(t), align="center",

font=("Courier", 14, "bold"))

printer.home()

turtle.tracer(True)

# 100ms后继续调用tick

turtle.ontimer(Tick, 100)

def main():

# 打开/关闭龟动画,并为更新图纸设置延迟。

turtle.tracer(False)

Init()

SetupClock(160)

turtle.tracer(True)

Tick()

turtle.mainloop()

if __name__ == "__main__":

main()

最后谢谢大家阅读

我建了一个python学习交流群,654234959欢迎大家的加入,有小白也有大神,有共同的学习目标,人生苦短,,我用python。天青色等烟雨,而我在等你。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/558360.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Git各指令的本质

前言 作为当前世界上最强大的代码管理工具Git相信大家都很熟悉,但据我所知有很大一批人停留在clone、commit、pull、push...的阶段,是不是对rebase心里没底只敢用merge?碰见版本回退就抓瞎?别问我怎么知道的,问就是&a…

python re模块详解_python 详解re模块

本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例。本文的内容不包括如何编写高效的正则表达式、如何优化正则表达式,这些主题请查看其他教程。 注意:本文基于Python2.4完成&#xf…

cass或cad里提取点坐标及高程的插件_一个坐标计算小程序 EXCEL 可以进行抵偿任意带高斯坐标转换...

永久下载:https://www.celiang.net/article/688【1】史上最齐全的CAD下载资源!!!【2】【BIM软件】Revit 2018软件安装包免费送,内附安装教程!【3】南方CASS展点方法视频教程【4】坐标转换中的七参数详谈&am…

一个java文件里面可以写多少个class

一个java文件里面可以有多个类,但是public修饰的类只能有一个。public类的名称必须完全与含有该编译单元的文件名相同,包含大小写。如果不匹配,同样将得到编译错误。一个java文件里里面可以没有public修饰的类,这时候文件名也就随…

exe解包和重新打包_Jira 批量提交问题 + 生成可执行文件exe

本地环境 Python 3.7.1 windows 10 x64一 jira 批量提交1 脚本思路(1) 待提交问题存储:csv (习惯用 csv ,其他如excel 理论上也可以)(2) 使用 jira 库的方法 create_issue(3) 已提交问题存储到另一个 csv 文件里(用于后续操作,如统一更新状态…

Mybatis-puls打印sql语句

在配置文件中直接添加 mybatis-plus.configuration.logimplorg.apache.ibatis.logging.stdout.StdOutImpl

python统计输入学生的总分和平均分_C输入函数和成绩显示函数并计算每位同学总分和平均分对成绩排名输出.doc...

《C程序设计》测试题 Luozhengchun 编写C程序完成某班学生考试成绩的统计管理,包括成绩的输入函数和成绩显示函数,并计算每位同学的总分和平均分,对成绩排名输出。 #include /*标准输入、输出函数库*/ #include /*字符串处理函数库*/ #includ…

JDBC进行事务管理

事务的四个特征: 原子性 : 是指事务中包含的操作都被看做是一个逻辑单元 一致性: 开始前和结束后数据库都处于一致性状态 隔离性: 对数据库修改的多个事务是彼此隔离的 持久性: 事务完成之后对系统的影响是永久的

matlab基于dct的图像压缩编码解码_音频压缩编码的基本原理详解

1.视频编码基本原理(1) 视频信号的冗余信息以记录数字视频的YUV分量格式为例,YUV分别代表亮度与两个色差信号。例如对于现有的PAL制电视系统,其亮度信号采样频率为13.5MHz;色度信号的频带通常为亮度信号的一半或更少&a…

java多态理解

多态的实现必须有三个条件 1:必须要有继承 2:必须要有重写 3:父类引用指向子类对象 上面三个条件缺一不可 举例: 假设现在有一个父类Animal,这里为了方便,使用抽象类,Animal有唱歌、散步这两个方…

linux 查看登入记录_无时无刻,用 SimplyBook.me 管理者 App 查看客户预约排程!

经过数日优化及调整,SimplyBook.me 日前推出了管理者专用 App,有别于过往在手机装置中,透过网页查询预约资讯,现在经营者也能到 App Store 或是 Google Play 下载专属应用程式(App),无时无刻管理…

Java封装理解

封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。 在java中通过4种“访问控制符”分别为private、default、protected、public,实现封装。它们说明了面向对象的封装性,所以我们要利用它们尽可能的让访问权限…

python组成结构_Python数据分析丨pandas基本数据结构组成

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于腾讯云,作者:统计学家 目录 1引言 2 Series数组 2.1 Series数组构成 2.2 创建Series数组 2.3 Series数组常用属性 3…

java类加载顺序和创建对象加载顺序

类的加载顺序 有父子关系的类在加载时先调用父类静态初始化块,静态属性,但不包括静态方法,然后再是,子类静态初始化块,静态属性,但同样不包括静态方法 。 类什么时候被加载/类加载时机: 第一&…

spring读取properties配置文件_Spring-1

spring共四天 第一天:spring框架的概述以及spring中基于XML的IOC配置 第二天:spring中基于注解的IOC和ioc的案例 第三天:spring中的aop和基于XML以及注解的AOP配置 第四天:spring中的JdbcTemlate以及Spring事务控制 -------------…

java类加载及new对象的过程

Son son new Son(); 这句话到底做了什么事情呢? 1.javac编译.java源文件形成.class字节码文件; 2.new Sub() 对象时,先检查有没有父类,有父类,类加载器(ClassLoader)先将父类的Class文件读入内存,创建一个java.lang…

文字层一点就变红_学习观察神经网络:可视化整个模型训练中卷积层的激活

全文共3425字,预计学习时长10分钟图源:www.raincent.com深度学习是机器学习领域中一个新的研究方向,它被引入机器学习使其更接近于最初的目标——人工智能。深度学习是学习样本数据的内在规律和表示层次,这些学习过程中获得的信息…

Maven的作用

Maven 主要用处一:相同的项目结构 使用Maven管理的Java 项目都有着相同的项目结构 1. 有一个pom.xml 用于维护当前项目都用了哪些jar包 2. 所有的java代码都放在 src/main/java 下面 3. 所有的测试代码都放在src/test/java 下面 Maven 主要用处二:统一…

python函数可以提高运行效率吗_python 多进程如何提高函数效率?

1 如何利用multiprocessing 库提高单个函数的执行效率2 代码如下:def f():urls [http://yanbao.stock.hexun.com/listnews1_{}.shtml.format(i) for i in range(1,5)]d {}l1 []l2 []for url in urls:con requests.get(url).textsoup BeautifulSoup(con, lxml)…