turtle画图

news/2024/4/30 17:05:21/文章来源:https://blog.csdn.net/sichuanpb/article/details/127278408

千万不要把自己的文件命名为turtle,否则出错都找不到原因。

安装 pip install turtle

使用

import turtle as  tt

下面的实例可以直接使用

一、turtle简易教程
1. 画笔运动
turtle.backward(50) #向后
turtle.left(45) #向左
turtle.forward(100) #向前
turtle.right(90) #向右

#提笔方法,提笔后不留痕迹
turtle.penup() #画笔在空中提起,挪至指定位置后再放下
turtle.setpos(10,10) #设置画笔纵坐标为10,横坐标为10
turtle.pendown()

#画圆 三角形
turtle.circle(100) #画直径为100的圆
turtle.circle(100,120) #画120度的弧线
turtle.circle(radius, extent=None, steps=None)
描述:可以设置steps
radius(半径):半径为正(负),表示圆心在画笔的左边(右边)画圆;
extent(弧度) (optional);
steps (optional) (做半径为radius的圆的内切正多边形,多边形边数为steps)。
turtle.circle(50,steps=3) #等边三角形


#对x,y进行操作
turtle.goto(x,y) #将画笔移动到坐标为x,y的位置
setx()
sety()

setheading(angle) #设置当前朝向为angle角度
home() #设置当前画笔为原点,朝向东
dot(r) #绘制一个指定直径和颜色的圆点


2. 画笔控制
turtle.bgcolor('yellow') #画布颜色
turtle.color('green') #画笔颜色

turtle.fillcolor(colorstring) #绘制图形的填充颜色
turtle.filling() #返回当前是否在填充状态
turtle.begin_fill()
turtle.end_fill()

#隐藏画笔箭头
turtle.hideturtle()
turtle.showturtle()

#设置画笔尺寸
turtle.pensize(20)
#另一种画笔设置方法
turtle.pen(pensize=10, pencolor='red',fillcolor='yellow')

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参数也是可选项
turtle.write("Done", font=('Arial', 40, 'normal'))

4. 其他
#启动事件循环 调用Tkinter的mainloop函数必须是乌龟图形程序中的最后一个语句
turtle.mainloop() 或 turtle.done()

#设置乌龟模式('standard','logo','world')
#standard 向右(东),逆时针
#logo 向上,顺时针

turtle.delay(delay=None) #设置或返回毫秒为单位的绘图延迟
turtle.begin_poly() #开始记录多边形的顶点。当前的乌龟位置是多边形的第一个顶点
turtle.end_poly() #停止记录多边形的顶点。当前乌龟位置是多边形的最后一个顶点。将与第一个顶点相连
turtle.get_poly() #返回最后记录的多边形


二、具体示例
1. 画正方形
turtle.bgcolor('black')
turtle.color('yellow')
totalTimes=4 #设定一共需要重复的次数
for times in range(totalTimes): #使用for语句对每一次进行设计相同的动作组合
turtle.forward(100) #设定前移100个像素点
turtle.left(90) #然后左转90度

2. 画五边形和六边形
import turtle
turtle.bgcolor('black')
turtle.color('yellow')
#先画6边形
totalTimes=6
for times in range(totalTimes):
turtle.forward(100)
turtle.left(60)

#然后左转向150度,并往前移动50个像素点
turtle.left(150)
turtle.forward(50)

#最后画5边形
totalTimes=5
for times in range(totalTimes):
turtle.forward(100)
turtle.left(72)

3. 画圆
(1)方法一
import turtle
turtle.bgcolor('black')
turtle.color('yellow')

totalTimes=360
for times in range(totalTimes):
turtle.forward(1)
turtle.left(1)

(2)方法二
import turtle
turtle.bgcolor('black')
turtle.color('yellow')

turtle.circle(100)

4. 坐标轴设置
import turtle

turtle.bgcolor('black')
turtle.color('yellow')

turtle.circle(100)

turtle.setpos(10,20)
turtle.circle(100)

5. 提笔落笔
import turtle
turtle.bgcolor('black')
turtle.color('yellow')
#提起画笔
turtle.penup()
#设置画笔的位置挪到纵横坐标均为10像素的位置,即中心点往右45度方向
turtle.setpos(10,10)
#落下画笔
turtle.pendown()
#开始画圆,画一个半径为100像素的圆
turtle.circle(30)

6. 画五环
import turtle

#画第1个圆
turtle.penup()
turtle.setpos(0,-50)
turtle.pendown()

turtle.pen(pensize=10, pencolor='red',fillcolor='yellow')
turtle.circle(50)

#画第2个圆
turtle.penup()
turtle.setpos(75,-50)
turtle.pendown()
turtle.color('yellow')
turtle.circle(50)

#画第3个圆
turtle.penup()
turtle.setpos(155,-50)
turtle.pendown()
turtle.color('red')
turtle.circle(50)

#画第4个圆
turtle.penup()
turtle.setpos(37.5,0)
turtle.pendown()
turtle.color('black')
turtle.circle(50)

#画第5个圆
turtle.penup()
turtle.setpos(112.5,0)
turtle.pendown()
turtle.color('purple')
turtle.circle(50)

7. 填充颜色
import turtle
turtle.pen(pensize=5, pencolor='red',fillcolor='yellow')
turtle.circle(100)

turtle.setpos(112.5,0)
turtle.pen(pensize=10, pencolor='black',fillcolor='blue')
turtle.fillcolor('yellow')

turtle.begin_fill()
turtle.circle(200)
turtle.end_fill()

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

9. 五角星
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()

10. 时钟程序
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()

===================================================================

更多技巧

基础总结

turtle库是python标准库之一,入门级绘图库。import turtle之后即可使用。

turtle绘图原理:有一只海龟,其实在窗体正中心,在画布上游, 走过的轨迹形成了绘制的图形,海龟由程序控制,可以变换 颜色、改变宽度等。

1、绘图窗口设置命令

turtle.setup(400,300,200,100):参数以此(宽,高,距离屏幕左边距离,距离屏幕上方距离),屏幕左上角原点,单位像素。

2、运动命令

turtle.goto(x,y):直接跳转到(x,y)点,以绘图窗口中心为原点,向右为x轴,向上为y轴。

turtle.fd(d)、turtle.forward(d):以当前方向,往前行进d像素。

turtle.bk(d)、turtle.backword(d):保持当前方向不变,往后退行d像素。

turtle.circle(r,angle):从当前位置以r为半径圆的angle角度旋转。

3、方向设置命令

turtle.seth(angle):以x轴方向为起点将方向偏转为angle度,逆时针为正。只改变行进方向但不行进。

turtle.left(angle):在当前行进方向的基础上,向左旋转angle度。

turtle.right(angle):在当前行进方向的基础上,向右旋转angle度。

4、画笔控制命令

turtle.penup():台笔

turtle.pendown():落笔

turtle.pensize(width):画笔粗细

turtle.pencolor(颜色名red/RGB三元组/颜色编码):画笔颜色

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

turtle.begin_fill():开始填充

turtle.end_fill():结束填充

turtle.filling():返回当前是否在填充状态

示例

1、使用 turtle 库的 turtle.fd() 函数和 turtle.seth() 函数绘制一个等边三角形,边长为 200 像素,

 import turtle as tfor i in range(3):t.seth(i*120)t.fd(200)

2、使用 turtle 库的 turtle.fd() 函数和 turtle.seth() 函数绘制一个边长为 200 的正方形,效果如下图所示。

import turtle
d = 0
for i in range(4):turtle.fd(200)d=d+90turtle.seth(d)

3、使用 turtle 库的 turtle.right() 函数和 turtle.fd() 函数绘制一个菱形四边形,边长为 200 像素,效果如下图所示。

import turtle as t
t.right(-30)
for i in range(2):t.fd(200)t.right(60*(i+1))
for i in range(2):t.fd(200)t.right(60*(i+1))

4、用 turtle 库的 turtle.fd() 函数和 turtle.left() 函数绘制一个六边形,边长为 200 像素,效果如下图所示。

import turtle as t
for i in range(6):t.fd(200)t.left(60)

5、用 turtle 库的 turtle.fd() 函数和 turtle.seth() 函数绘制一个五边形,边长为 200 像素,效果如下图所示。

import turtle
d = 0
for i in range(5):turtle.fd(200)d += 72turtle.seth(d)

6、使用 turtle 库的 turtle.circle() 函数、turtle.seth() 函数和 turtle.left() 函数绘制一个四瓣花图形,从左上角花瓣开始,逆时针作画,效果如下图所示。

import turtle as t
for i in range(4):t.seth(90 * (i + 1))#90,180,270,360t.circle(200,90)#-90,0,90,180t.seth(-90 + i * 90)t.circle(200,90)

7、使用 turtle 库的 turtle.right() 函数和 turtle.circle() 函数绘制一个四叶草,效果如下图所示。

import turtle
for i in range(4):turtle.right(90)turtle.circle(50,180)

8、使用 turtle 库的 turtle.right() 函数和 turtle.circle() 函数绘制一个星星图形(半径为90),如下图所示。

import turtle
for i in range(4):turtle.circle(-90,90)turtle.right(180)

9、使用 turtle 库的 turtle.circle() 函数和 turtle.seth() 函数绘制套圈,最小的圆圈半径为 10 像素,不同圆圈之间的半径差是 40 像素。

import turtle
r =10
head = 90
for i  in range (4):turtle.seth(head)turtle.circle (r)r = r + 40
turtle.done()

10、使用 turtle 库的 turtle.circle() 函数和 turtle.seth() 函数绘制同心圆套圈,最小的圆圈半径为 10 像素,不同圆圈之间的半径差是 40 像素,效果如下图所示。

import turtle
r = 10
dr = 40
head = 90
for i  in range (4):turtle.pendown()turtle.circle(r)r +=  drturtle.penup()turtle.seth(-head)turtle.fd(dr)turtle.seth(0)
turtle.done()

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

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

相关文章

Vue.js中props的使用

作用: props是用于Vue中 父组件 向 子组件 传值的时候使用。 props的传递是单向的。不要在子组件改变props的值。 一、props的定义 props 需要使用 props 选项来定义: export default {props: [foo],created() {// props 会暴露到 this 上console.log…

drf jwt 原理,cookie,session,token base64

drf jwt 原理,cookie,session,token base64 文章目录drf jwt 原理,cookie,session,token base641、cookie,session,token介绍2、jwt 原理介绍3、 base64编码和解码4、drf-jwt快速使用…

深度学习 Day 15——利用卷神经网络实现好莱坞明星识别

深度学习 Day 15——利用卷神经网络实现好莱坞明星识别 文章目录深度学习 Day 15——利用卷神经网络实现好莱坞明星识别一、前言二、我的环境三、前期工作1、导入依赖项并设置GPU2、导入数据集3、查看数据集四、数据预处理1、加载数据2、检查数据并可视化数据3、配置数据集五、…

【Spring依赖循环】提前曝光,直接曝光到二级缓存已经可以解决循环依赖问题了,为什么一定要三级缓存?

前言 问:什么是循环依赖? 循环依赖:说白是一个或多个对象实例之间存在直接或间接的依赖关系,这种依赖关系构成了构成一个环形调用。 问:Spring 如何解决循环依赖? 答:Spring 通过提前曝光机…

vue读取本机的excel文件的两种方式

安装依赖 npm install xlsx --save引入 import XLSX from ‘xlsx’ 更新:2022-04-26 最新的xlsx依赖包引入方式改变,以前的直接引入失败了,切换成以下依赖方式: import { read, utils } from xlsx如果有使用elementUI&#xf…

JavaScript基础万字总结---重点

目录JavaScript简介什么是JavaScript浏览器执行JS过程JS的组成JS的引入方式函数与作用域arguments的使用全局变量与局部变量预解析对象创建对象的三种方式1.利用字面量创建对象2.利用 new Object 创建对象3.利用构造函数创建对象遍历对象属性变量、属性、函数、方法总结new关键…

0053 Exception异常

/*异常Java语言中,将程序执行中发生的不正常情况称为"异常"。(语法错误和逻辑错误不是异常)执行过程中所发生的异常可分为两类1.Error:Java虚拟机无法解决的严重问题,程序会崩溃如:JVM系统内部错…

如何免费使用GPU进行加速?(两种方法)

文章目录如何使用免费的GPU?Kaggle使用免费GPUGoogle Colab 使用免费GPU小结如何使用免费的GPU? 我是学生党,最近在学习深度学习,需要用到GPU加速,现分享两个免费使用GPU的方法。 1、使用 Kaggle 的免费GPU,Kaggle每周可以赠送…

Android 最全Ignore文件 : 解决部分不必要文件上传到Git的问题

1. 背景 我们新建一个Android项目,默认会生成一个.ignore文件 *.iml .gradle /local.properties /.idea/caches /.idea/libraries /.idea/modules.xml /.idea/workspace.xml /.idea/navEditor.xml /.idea/assetWizardSettings.xml .DS_Store /build /captures .ex…

简单了解一下C语言main函数的参数

目录 一、main函数的参数 argc 和 argv 运行效果 需要注意的两个个点 一、main函数的参数 main函数有三个参数,argc、argv和envp,envp参数的应用场景不多,这里就不多介绍,感兴趣的可以自己去了解一下 它的标准写法如下&#x…

<初识Python及编程环境搭建>——《Python》

目录 1. Python 的背景知识: 2. Python 的用途: 3. Python 的优缺点 : 4. 搭建 Python 编程环境: 4.1 安装 Python (1) 找到官方网站 (2) 找到下载页面 (3) 双击安装包 (4) 运行 hello world 4.2 安装 PyCharm 后记&a…

tensorflow多层感知机+mnist数据集

这里写目录标题keras与tensorflow建立模型的不同加载mnisttensorflow多层感知机构建全连接层函数定义感知机各层的输入和输出损失函数、优化器模型准确率计算模型训练参数定义训练开始模型训练效果可视化模型评分利用模型进行预测显示混淆矩阵keras与tensorflow建立模型的不同 …

两栏布局与三栏布局(圣杯布局与双飞翼布局)

两栏布局 右侧绝对定位的写法 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name"viewport" content&qu…

浅析某城商行手机银行水平授权漏洞问题

-问题现象描述 据报道&#xff0c;某黑客通过软件抓包、PS身份证等非法手段&#xff0c;在某城商行手机银行APP内使用虚假身份信息注册银行Ⅱ、Ⅲ类账户。 其操作方法具体来说&#xff0c;是在注册账户过程中&#xff0c;先输入本人身份信息&#xff0c;待进行人脸识别步骤时…

Flask学习笔记(十二)-Flask-Migrate实现数据库迁移详解

一、定义flask-migrate是基于Alembic的一个封装,并集成到Flask中 所有的迁移操作其实都是Alembic做的,能跟踪模型的变化,并将变化映射到数据库中。二、Flask-Migrate安装pip install flask-migrate三、使用Flask-Migrate步骤  实例展示: 目录结构:  flask_SQLalchemy:. …

MindSpore体验--在Windows10中源码安装

MindSpore体验--在Windows10中源码安装&#xff08;反面教材&#xff09; 一直以来安装包都是直接pip intall&#xff0c;发现安装MindSpore的操作流程中教学了源码编译安装&#xff0c;借此学习一下使用源码安装。 环境创建 为了方便管理环境&#xff0c;此处我新创建了一个…

多测师肖sir_高级讲师_第2个月第27讲解jmeter性能测试jmeter性能实战

jmeter性能实战 一、单接口性能测试 1、先建接口cms 登录接口 2、在监听器中添加聚合报告 3、设置线程组 &#xff08;1&#xff09;线程组&#xff1a;一个线程组中有若干个请求 &#xff08;2&#xff09;线程 &#xff1a;一个虚拟用户就是一个线程 &#xff08;3&#…

webpack的一些常用打包配置

1.webpack 是什么&#xff1f; webpack 是一个模块化打包工具 2.模块是什么&#xff1f; 模块我理解就是 import xx 后面导入的文件就是一个模块 它可以是js css 图片 等等 3&#xff0c;webpack的配置文件的作用&#xff1f; 就是根据需求自定义配置webpack webpack默认只能打…

轻轻松松搞定分布式Token校验

文章目录前言token存储Token 存储实体login 业务代码枚举类修改存储效果客户端存储token验证前端提交后端校验自定义注解切面处理使用总结前言 没想到前天小水了一篇博文&#xff0c;竟然就火了&#xff1f;&#xff01;&#xff01;既然如此&#xff0c;那我再来一篇&#xf…

第7章 单行函数

1.函数的理解 *函数可以把我们经常使用的代码封装起来&#xff0c;需要的时候直接调用即可。这样既提高了代码效率&#xff0c;又提高了可维护性。在SQL中我们也可以使用函数对检索出来的数据进行函数操作。使用这些函数&#xff0c;可以极大地提高用户对数据库的管理效率。 …