Python的画图模块turtle使用详解

news2024/11/25 4:32:58

简介: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]整数,数字越大越快。

3.绘图窗口的原点(0,0)在正中间。默认情况下,海龟向正右方移动。

4.操纵海龟绘图有着许多的命令,这些命令可以划分为两种:一种为运动命令,一种为画笔控制命令

(1)运动命令:

forward(d) 向前移动距离d代表距离

backward(d) 向后移动距离d代表距离

right(degree) 向右转动多少度

left(degree) 向左转动多少度

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

stamp() 绘制当前图形

speed(speed) 画笔绘制的速度范围[0,10]整数

(2)画笔控制命令:

down() 画笔落下,移动时绘制图形

up() 画笔抬起,移动时不绘制图形

setheading(degree) 海龟(turtle)朝向,degree代表角度

reset() 恢复所有设置

pensize(width) 画笔的宽度

pencolor(colorstring) 画笔的颜色

fillcolor(colorstring) 绘制图形的填充颜色

circle(radius, extent) 绘制一个圆形,其中radius为半径,extent为度数,例如若extent为180,则画一个半圆;如要画一个圆形,可不必写第二个参数

使用Python的turtle(海龟)模块画图

第一步:让Python引入turtle模块,引入模块就是告诉Python你想要用它。

importturtle

第二步:创建画布。调用turtle中的Pen函数。

t=turtle.Pen()

第三步:移动海龟。

t.forward(50)

forward的中文意思是“向前地;促进”。所以这行代码的意思是海龟向前移动50个像素:

t.left(90)

让海龟左转90度

现在我们可以尝试画一个方块,思路就是前进-转向90度-前进,循环四次。

1

2

3

4

5

6

7

8

9

>>> t.forward(50)

>>> t.left(90)

>>> t.forward(50)

>>> t.left(90)

>>> t.forward(50)

>>> t.left(90)

>>> t,forward(50)

>>> t.left(90)

>>> t,forward(50)

效果如下:

第四步:擦除画布。

1

>>>t.reset()

重置命令(reset)这会清除画布并把海龟放回开始的位置。

1

>>>t.clear()

清除命令(clear)只清除屏幕,海龟仍停留在原位。

我们还可以让海龟向右(right)转,或者让它后退(backward)。我们可以用向上(up)来把笔从纸上抬起来(换句话说就是让海龟停止作画),用向下(down)来开始作画。

下面我们综合运用一下,画两条线。

1

2

3

4

5

6

7

8

>>> t.reset() //擦除画布并把海龟移回到开始位置

>>> t.backward(100) //后退100个像素

>>> t.up() // 抬笔不再作画

>>> t.right(90) //向右转90度

>>> t.forward(20) //前进20个像素

>>> t.left(90) //向左转90度

>>> t.down() //下笔准备作画

>>> t.forward(100) //前进100个像素

效果如下:

实例: 绘制太阳花

1

2

3

4

5

6

7

8

9

10

11

# 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()

效果:

总结

刚开始学用turtle模块作画,感觉就像小学刚开始作画一样。从前是拿起笔直接在纸上画,到现在使用Python作画时,感觉是把从前作画的动作分解开:准备画布——拿起笔准备作画——开始作画——放下笔不再作画。感觉很有趣,慢慢来,这才只是刚开始。

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

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

相关文章

【中级软件设计师】—(下午题)试题三精讲总结(四十二)

【中级软件设计师】—(下午题)试题三精讲总结(四十二) 一、关系 二、UML中的图 A包含B,那么A执行操作前必须要先执行B 试题一(2021年下半年) 试题2(2021年上半年) 官方…

【C++初阶】类和对象下篇

⭐博客主页:️CS semi主页 ⭐欢迎关注:点赞收藏留言 ⭐系列专栏:C初阶 ⭐代码仓库:C初阶 家人们更新不易,你们的点赞和关注对我而言十分重要,友友们麻烦多多点赞+关注,你们的支持是我…

板材激光切割机切割穿孔时注意的几个问题

激光切割设备广泛应用于钣金、五金制品、钢结构、汽车配件、广告、工艺品等行业,成为加工行业不可缺少的环节。在厚板加工中穿孔时间占很大比重,随着加工板材越来越厚,板材激光切割机切割穿孔也会相应地增加难度。 激光切割机两种常见的穿孔方…

druid 远程命令执行 (CVE-2021-25646)

漏洞原理 该漏洞主要就是根据Jackson解析特性(解析name为""时)会将value值绑定到对象(JavaScriptDimFilter,type为javascript时指定的)的对应参数(config)上,造成JavaScriptDimFilter中function属性中的javascript代码被执行。攻击者可以构造…

Redis高级数据结构HyperLogLog

HyperLogLog(Hyper[ˈhaɪpə(r)])并不是一种新的数据结构(实际类型为字符串类型),而是一种基数算法,通过HyperLogLog可以利用极小的内存空间完成独立总数的统计,数据集可以是IP、Email、ID等。 如果你负责开发维护一个大型的网站,有一天产品…

pytorch移植华为mindspore记录

因为某个需求,需要把原来pytorch的神经网络移植到华为的mindspore上 这边记录下遇到的坑 附上mindspore的官方教程: https://mindspore.cn/tutorials/zh-CN/r2.0/advanced/compute_graph.html 这边附上需要移植的网络,以tensorflow和pytorch…

LeetCode 链表OJ分享

目录 删除排序链表中的重复元素回文链表剑指Offer 06.从尾到头打印链表复制带随机指针的链表 删除排序链表中的重复元素 链接: link 题目描述: 题目思路: 本题思路使用双指针,以示例二为例如下图: 如果head->val等于next-&…

ihateniggers:针对Python开发者的Windows远控木马分析

背景 墨菲安全实验室在持续监测开源软件仓库中的投毒行为,5 月 9 日起发现 4 个包含 “ihateniggers” 远程控制木马的 Python 包被 nagogygmail.com 邮箱关联的账号发布到 PyPI 仓库,试图针对Windows系统下 Python 开发者进行攻击。木马利用了discord、…

各种顺序表和链表的实现代码

目录 一、什么是线性表 二、顺序表 2.1什么是顺序表 2.2静态顺序表的代码实现 2.3动态顺序表的代码实现 三、链表 3.1什么是链表 3.2不带头单向不循环链表的代码实现 3.3带头双向循环链表的代码实现 四、顺序表和链表的区别 一、什么是线性表 线性表是n个具有相同特性…

(十五)数据编辑——图形编辑①

数据编辑——图形编辑① 数据编辑包括几何数据和属性数据的编辑。几何数据的编辑主要是针对图形的操作,即图形编辑,包括平行线复制、缓冲区生成、镜面反射、图层合并、结点操作、拓扑编辑等。属性编辑主要包括图层要素属性的添加、删除、修改、复制、粘…

谷歌落子,我们对中国大模型的期待应该是什么?

对中国大模型厂商而言,市场期待的,也恰是这些真正可落地的应用和实践。这些实践可以在社交,在电商,在低代码,在供应链,也更可以在一个个中国产业数字化转型的新洼地。 作者|思杭 皮爷 出品|产业家 在微软G…

裸辞5个月,面试了37家公司,终于.....

上半年裁员,下半年裸辞,有不少人高呼裸辞后躺平真的好快乐!但也有很多人,裸辞后的生活五味杂陈。 面试37次终于找到心仪工作 因为工作压力大、领导PUA等各种原因,今年2月下旬我从一家互联网小厂裸辞,没想…

执行增删改查时的结果处理

查询最终走到PreparedStatementHandler类的query方法,执行查询后调用DefaultResultSetHandler类的handleResultSets方法 1.处理返回的普通实体类 DefaultResultSetHandler类的handleResultSets方法 继续本类的handleResultSet方法 通过 handleRowValues 方法来…

设计一个可靠的自动化测试框架需要考虑哪些问题呢?

随着软件开发的日益普及,自动化测试框架逐渐成为了保障软件质量的必备工具。然而,如何设计一个可靠的自动化测试框架并不是一件简单的事情,需要考虑多方面的问题。本文将从需求分析、架构设计、测试用例编写等多个角度,介绍设计一…

【SpringMVC】| SpringMVC拦截器

目录 一:SpringMVC拦截器 1. 拦截器介绍 2. HandlerInterceptor接口分析 3. 自定义拦截器实现权限验证 一:SpringMVC拦截器 SpringMVC 中的 Interceptor 拦截器,它的主要作用是拦截指定的用户请求,并进行相应的预处理与后处理…

C++面向对象(黑马程序员)

内存分区模型 #include<iostream> using namespace std;//栈区数据注意事项&#xff1a;不要返回局部变量的地址 //栈区的数据由编译器管理开辟和释放int* func(int b) //形参数据也会放在栈区 {b 100;int a 10; //局部变量存放在栈区&#xff0c;栈区的数据在函数执…

Qt创建项目 No suitable kits found.

最近因为要写.net6项目&#xff0c;而更新了Visual Studio&#xff0c;后来再使用Qt的时候发现不能编译了。 调整后&#xff0c;发现新建项目显示“No suitable kits found”错误。 网上也看了很多的解决方案&#xff0c;但都不得要领&#xff0c;也都没有解决。 ----------…

Java-Redis持久化之AOF操作

Java-Redis持久化之AOF操作 1.AOF(append only file)2.请你用自己的话说一说 AOF的过程?3.配置如何开启AOF操作4.AOF的优点和缺点: 1.AOF(append only file) 将我们所有的命令都记录下来保存到文件&#xff0c;恢复的时候把这个文件都执行一遍。 2.请你用自己的话说一说 AOF…

【Vue】学习笔记-全局事件总线

全局事件总线(GlobalEventBus) 一种可以在任意组件通信的方式&#xff0c;本质上就是一个对象&#xff0c;它必须满足以下条件 所有的组件对象都必须能看见他这个对象必须能够使用$ on $ emit $ off方法取绑定、触发和解绑事件 使用步骤 定义全局事件总线 //创建VUE new V…

WPF中的用户控件和自定义控件详解

总目录 文章目录 总目录一、什么是用户控件和自定义控件1 用户控件和自定义控件2 相关知识点2 用户控件和自定义控件的适用场景 二、用户控件的使用1.通过依赖属性和路由事件封装用户控件的案例2.通过依赖属性命令依赖属性封装用户控件的案例3.只对外提供属性不对外提供操作的用…